Attached is debdiff, have uploaded a package to mentors.debian.net:
http://mentors.debian.net/debian/pool/main/n/ndiswrapper/ndiswrapper_1.53-2.dsc
---
diff -u ndiswrapper-1.53/debian/changelog ndiswrapper-1.53/debian/changelog
--- ndiswrapper-1.53/debian/changelog
+++ ndiswrapper-1.53/debian/changelog
@@ -1,3 +1,11 @@
+ndiswrapper (1.53-2) unstable; urgency=high
+
+  * Add debian/patches/CVE-2008-4395.patch to fix a vulnerability in handling
+    of long ESSIDs which allows execution of code as root via remote attacker.
+    (Closes: #504696)
+
+ -- Kel Modderman <[EMAIL PROTECTED]>  Thu, 06 Nov 2008 21:06:38 +1000
+
 ndiswrapper (1.53-1) unstable; urgency=low
 
   [ Kel Modderman ]
diff -u ndiswrapper-1.53/debian/patches/series 
ndiswrapper-1.53/debian/patches/series
--- ndiswrapper-1.53/debian/patches/series
+++ ndiswrapper-1.53/debian/patches/series
@@ -1,0 +2 @@
+CVE-2008-4395.patch
only in patch2:
unchanged:
--- ndiswrapper-1.53.orig/debian/patches/CVE-2008-4395.patch
+++ ndiswrapper-1.53/debian/patches/CVE-2008-4395.patch
@@ -0,0 +1,85 @@
+Anders Kaseorg discovered that ndiswrapper did not correctly handle long
+ESSIDs. For a system using ndiswrapper, a physically near-by attacker
+could generate specially crafted wireless network traffic and execute
+arbitrary code with root privileges. (CVE-2008-4395)
+
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/275860
+---
+--- a/driver/iw_ndis.c
++++ b/driver/iw_ndis.c
+@@ -47,12 +47,7 @@ int set_essid(struct ndis_device *wnd, c
+       req.length = ssid_len;
+       if (ssid_len)
+               memcpy(&req.essid, ssid, ssid_len);
+-      DBG_BLOCK(2) {
+-              char buf[NDIS_ESSID_MAX_SIZE+1];
+-              memcpy(buf, ssid, ssid_len);
+-              buf[ssid_len] = 0;
+-              TRACE2("ssid = '%s'", buf);
+-      }
++      TRACE2("ssid = '%.*s'", ssid_len, ssid);
+ 
+       res = mp_set(wnd, OID_802_11_SSID, &req, sizeof(req));
+       if (res) {
+@@ -125,7 +120,6 @@ static int iw_get_essid(struct net_devic
+               EXIT2(return -EOPNOTSUPP);
+       }
+       memcpy(extra, req.essid, req.length);
+-      extra[req.length] = 0;
+       if (req.length > 0)
+               wrqu->essid.flags  = 1;
+       else
+@@ -1000,7 +994,7 @@ static int iw_set_nick(struct net_device
+ 
+       if (wrqu->data.length > IW_ESSID_MAX_SIZE || wrqu->data.length <= 0)
+               return -EINVAL;
+-      memset(wnd->nick, 0, sizeof(wnd->nick));
++      wnd->nick_len = wrqu->data.length;
+       memcpy(wnd->nick, extra, wrqu->data.length);
+       return 0;
+ }
+@@ -1010,7 +1004,7 @@ static int iw_get_nick(struct net_device
+ {
+       struct ndis_device *wnd = netdev_priv(dev);
+ 
+-      wrqu->data.length = strlen(wnd->nick);
++      wrqu->data.length = wnd->nick_len;
+       memcpy(extra, wnd->nick, wrqu->data.length);
+       return 0;
+ }
+--- a/driver/ndis.h
++++ b/driver/ndis.h
+@@ -878,6 +878,7 @@ struct ndis_device {
+       unsigned long scan_timestamp;
+       struct encr_info encr_info;
+       char nick[IW_ESSID_MAX_SIZE];
++      size_t nick_len;
+       struct ndis_essid essid;
+       struct auth_encr_capa capa;
+       enum ndis_infrastructure_mode infrastructure_mode;
+--- a/driver/proc.c
++++ b/driver/proc.c
+@@ -97,10 +97,8 @@ static int procfs_read_ndis_encr(char *p
+       p += sprintf(p, "\n");
+ 
+       res = mp_query(wnd, OID_802_11_SSID, &essid, sizeof(essid));
+-      if (!res) {
+-              essid.essid[essid.length] = '\0';
+-              p += sprintf(p, "essid=%s\n", essid.essid);
+-      }
++      if (!res)
++              p += sprintf(p, "essid=%.*s\n", essid.length, essid.essid);
+       res = mp_query_int(wnd, OID_802_11_ENCRYPTION_STATUS, &encr_status);
+       if (!res) {
+               typeof(&wnd->encr_info.keys[0]) tx_key;
+--- a/driver/wrapndis.c
++++ b/driver/wrapndis.c
+@@ -2028,7 +2028,7 @@ static wstdcall NTSTATUS NdisAddDevice(s
+       wnd->attributes = 0;
+       wnd->dma_map_count = 0;
+       wnd->dma_map_addr = NULL;
+-      wnd->nick[0] = 0;
++      wnd->nick_len = 0;
+       init_timer(&wnd->hangcheck_timer);
+       wnd->scan_timestamp = 0;
+       init_timer(&wnd->iw_stats_timer);
---




-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to