2011/6/21 Michael Gilbert <michael.s.gilb...@gmail.com>:
> looking at the commit itself [0], i find Dan's conclusion rather
> surprising. the affected code is in the 802.11 stack, so it seems like
> it should be platform-independent.  i doubt x86 is any better at
> handling signedness issues, but i suppose i could be missing something.

Fix uploaded to unstable and experimental.

debian-security: Patch is available in r3480 in glibc-bsd SVN (attached
for your convenience).

-- 
Robert Millan
Index: debian/changelog
===================================================================
--- debian/changelog    (revision 3479)
+++ debian/changelog    (revision 3480)
@@ -1,3 +1,11 @@
+kfreebsd-8 (8.1+dfsg-8+squeeze1) UNRELEASED; urgency=low
+
+  * Fix net802.11 stack kernel memory disclosure (CVE-2011-2480).
+    (Closes: #631160)
+    - 000_net80211_disclosure.diff
+
+ -- Robert Millan <r...@debian.org>  Sat, 25 Jun 2011 13:24:06 +0200
+
 kfreebsd-8 (8.1+dfsg-8) stable-proposed-updates; urgency=low
 
   [ Petr Salinger ]
Index: debian/patches/series
===================================================================
--- debian/patches/series       (revision 3479)
+++ debian/patches/series       (revision 3480)
@@ -3,6 +3,7 @@
 000_coda.diff
 000_ufs_lookup.diff  
 000_tcp_usrreq.diff
+000_net80211_disclosure.diff
 001_misc.diff
 003_glibc_dev_aicasm.diff
 004_xargs.diff
Index: debian/patches/000_net80211_disclosure.diff
===================================================================
--- debian/patches/000_net80211_disclosure.diff (revision 0)
+++ debian/patches/000_net80211_disclosure.diff (revision 3480)
@@ -0,0 +1,79 @@
+--- a/sys/net80211/ieee80211_acl.c
++++ b/sys/net80211/ieee80211_acl.c
+@@ -77,7 +77,7 @@
+ struct aclstate {
+       acl_lock_t              as_lock;
+       int                     as_policy;
+-      int                     as_nacls;
++      uint32_t                as_nacls;
+       TAILQ_HEAD(, acl)       as_list;        /* list of all ACL's */
+       LIST_HEAD(, acl)        as_hash[ACL_HASHSIZE];
+       struct ieee80211vap     *as_vap;
+@@ -289,7 +289,8 @@
+       struct aclstate *as = vap->iv_as;
+       struct acl *acl;
+       struct ieee80211req_maclist *ap;
+-      int error, space, i;
++      int error;
++      uint32_t i, space;
+ 
+       switch (ireq->i_val) {
+       case IEEE80211_MACCMD_POLICY:
+--- a/sys/net80211/ieee80211_ioctl.c
++++ b/sys/net80211/ieee80211_ioctl.c
+@@ -141,7 +141,7 @@
+ ieee80211_ioctl_getchaninfo(struct ieee80211vap *vap, struct ieee80211req 
*ireq)
+ {
+       struct ieee80211com *ic = vap->iv_ic;
+-      int space;
++      uint32_t space;
+ 
+       space = __offsetof(struct ieee80211req_chaninfo,
+                       ic_chans[ic->ic_nchans]);
+@@ -205,7 +205,7 @@
+ {
+       struct ieee80211_node *ni;
+       uint8_t macaddr[IEEE80211_ADDR_LEN];
+-      const int off = __offsetof(struct ieee80211req_sta_stats, is_stats);
++      const size_t off = __offsetof(struct ieee80211req_sta_stats, is_stats);
+       int error;
+ 
+       if (ireq->i_len < off)
+@@ -321,7 +321,7 @@
+       if (req.space > ireq->i_len)
+               req.space = ireq->i_len;
+       if (req.space > 0) {
+-              size_t space;
++              uint32_t space;
+               void *p;
+ 
+               space = req.space;
+@@ -456,7 +456,7 @@
+ 
+ static __noinline int
+ getstainfo_common(struct ieee80211vap *vap, struct ieee80211req *ireq,
+-      struct ieee80211_node *ni, int off)
++      struct ieee80211_node *ni, size_t off)
+ {
+       struct ieee80211com *ic = vap->iv_ic;
+       struct stainforeq req;
+@@ -501,7 +501,7 @@
+ ieee80211_ioctl_getstainfo(struct ieee80211vap *vap, struct ieee80211req 
*ireq)
+ {
+       uint8_t macaddr[IEEE80211_ADDR_LEN];
+-      const int off = __offsetof(struct ieee80211req_sta_req, info);
++      const size_t off = __offsetof(struct ieee80211req_sta_req, info);
+       struct ieee80211_node *ni;
+       int error;
+ 
+--- a/sys/net80211/ieee80211_ioctl.h
++++ b/sys/net80211/ieee80211_ioctl.h
+@@ -578,7 +578,7 @@
+       char            i_name[IFNAMSIZ];       /* if_name, e.g. "wi0" */
+       uint16_t        i_type;                 /* req type */
+       int16_t         i_val;                  /* Index or simple value */
+-      int16_t         i_len;                  /* Index or simple value */
++      uint16_t        i_len;                  /* Index or simple value */
+       void            *i_data;                /* Extra data */
+ };
+ #define       SIOCS80211               _IOW('i', 234, struct ieee80211req)

Reply via email to