Possible problems with _RBTree_Container_of

Sébastien Bourdeauducq sebastien at milkymist.org
Tue Nov 8 22:06:59 UTC 2011


Any comments?
Thanks,
Sébastien

-------- Original Message --------
Subject: [Milkymist-devel] likely bug in RTEMS CVS
Date: Mon, 7 Nov 2011 19:26:45 -0300
From: Werner Almesberger <werner at almesberger.net>
Reply-To: Milkymist One, Milkymist SoC and Flickernoise developers' list 
<devel at lists.milkymist.org>
To: Milkymist One, Milkymist SoC and Flickernoise developers' list 
<devel at lists.milkymist.org>

I'm looking at diffs between the CVS version of RTEMS and the version
in our SDK. One change in cpukit/score/include/rtems/score/rbtree.h
looks highly suspicious. Below is a patch that should improve it.

There seem to be two issues in the original code:

- the "node" argument of the macro is not protected, which could lead
   to very hard to find errors (this doesn't seem to cause any
   immediate problems just now, but it's a lousy risk to take)

- more seriously, "offsetof" counts in bytes while arithmentic on the
   "node" pointer counts in multiples of whatever size that object has


- Werner

Index: rbtree.h
===================================================================
RCS file: /usr1/CVS/rtems/cpukit/score/include/rtems/score/rbtree.h,v
retrieving revision 1.7
diff -u -r1.7 rbtree.h
--- rbtree.h	20 Oct 2011 11:58:54 -0000	1.7
+++ rbtree.h	7 Nov 2011 22:10:40 -0000
@@ -90,7 +90,8 @@
   *
   */
  #define _RBTree_Container_of(node,container_type, node_field_name) \
-  ((container_type*) (node - offsetof(container_type,node_field_name)))
+  ((container_type*) ((void *) (node) - \
+    offsetof(container_type,node_field_name)))

  /**
   *  This type indicates the direction.
_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist at Freenode



More information about the users mailing list