diff options
author | Martin Aberg <maberg@gaisler.com> | 2017-03-13 12:44:58 +0100 |
---|---|---|
committer | Daniel Hellstrom <daniel@gaisler.com> | 2017-05-14 12:31:57 +0200 |
commit | c297060b111701b2d16365485038e6cf80d279f2 (patch) | |
tree | 1983aa2000bcdc0f23de9faf616e8c232581d36e /c/src/lib/libbsp/sparc/shared/can/grcan.c | |
parent | leon, grcan: use RTEMS 4.12 SMP interrupt lock (diff) | |
download | rtems-c297060b111701b2d16365485038e6cf80d279f2.tar.bz2 |
leon, grcan: protect statistics on copy to user
Locking the stats structure when copying to user buffer ensures a consistent
view to the user.
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/can/grcan.c')
-rw-r--r-- | c/src/lib/libbsp/sparc/shared/can/grcan.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/can/grcan.c b/c/src/lib/libbsp/sparc/shared/can/grcan.c index 409e68bf72..003cecf54d 100644 --- a/c/src/lib/libbsp/sparc/shared/can/grcan.c +++ b/c/src/lib/libbsp/sparc/shared/can/grcan.c @@ -1612,13 +1612,16 @@ int grcan_set_rxcomplete(void *d, int complete) int grcan_get_stats(void *d, struct grcan_stats *stats) { struct grcan_priv *pDev = d; + SPIN_IRQFLAGS(oldLevel); FUNCDBG(); if ( !stats ) return -1; + SPIN_LOCK_IRQ(&pDev->devlock, oldLevel); *stats = pDev->stats; + SPIN_UNLOCK_IRQ(&pDev->devlock, oldLevel); return 0; } |