From: Martin Aberg <mab...@gaisler.com>

Locking the stats structure when copying to user buffer ensures a consistent
view to the user.
---
 c/src/lib/libbsp/sparc/shared/can/grcan.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/c/src/lib/libbsp/sparc/shared/can/grcan.c 
b/c/src/lib/libbsp/sparc/shared/can/grcan.c
index 409e68b..003cecf 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;
 }
-- 
2.7.4

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to