Quoting Christian Perrier ([EMAIL PROTECTED]): > > You should prepare an upload with distribution stable-security, urgency > > high, and upload it to: > > > > <ftp://security-master.debian.org/pub/SecurityUploadQueue> > > OK, that upload is ready.
Uploaded. I attached a debdiff with the former version in etch...
diff -u samba-3.0.24/debian/patches/series samba-3.0.24/debian/patches/series --- samba-3.0.24/debian/patches/series +++ samba-3.0.24/debian/patches/series @@ -31,0 +32 @@ +security-CVE-2008-1105.patch diff -u samba-3.0.24/debian/changelog samba-3.0.24/debian/changelog --- samba-3.0.24/debian/changelog +++ samba-3.0.24/debian/changelog @@ -1,3 +1,11 @@ +samba (3.0.24-6etch10) stable-security; urgency=high + + * debian/patches/security-CVE-2008-1105.patch: fix a heap overflow + when parsing SMB responses in client code. (CVE-2008-1105) + Closes: #483410 + + -- Christian Perrier <[EMAIL PROTECTED]> Wed, 28 May 2008 20:32:04 +0200 + samba (3.0.24-6etch9) stable-security; urgency=high * debian/patches/security-CVE-2007-6015.patch: fix a remote code only in patch2: unchanged: --- samba-3.0.24.orig/debian/patches/security-CVE-2008-1105.patch +++ samba-3.0.24/debian/patches/security-CVE-2008-1105.patch @@ -0,0 +1,187 @@ +commit 7e191387d64de2c965fc2c999bc7d1ccf4aae010 +Author: Gerald W. Carter <[EMAIL PROTECTED]> +Date: Wed May 28 07:30:19 2008 -0500 + + Security: Patche for CVE-2008-1105. + + -- Summary -- + Specifically crafted SMB responses can result + in a heap overflow in the Samba client code. + Because the server process, smbd, can itself + act as a client during operations such as + printer notification and domain authentication, + this issue affects both Samba client and server + installations. + + Ensure that we specify the buffer size used to store incoming SMB + packets. This bug was originally introduced in Samba 2.2.4. Patch from + Jeremy Allison. + +Index: samba-3.0.24/source/client/client.c +=================================================================== +--- samba-3.0.24.orig/source/client/client.c ++++ samba-3.0.24/source/client/client.c +@@ -3230,7 +3230,7 @@ + session keepalives and then drop them here. + */ + if (FD_ISSET(cli->fd,&fds)) { +- if (!receive_smb(cli->fd,cli->inbuf,0)) { ++ if (!receive_smb(cli->fd,cli->inbuf,cli->bufsize,0)) { + DEBUG(0, ("Read from server failed, maybe it closed the " + "connection\n")); + return; +Index: samba-3.0.24/source/client/smbctool.c +=================================================================== +--- samba-3.0.24.orig/source/client/smbctool.c ++++ samba-3.0.24/source/client/smbctool.c +@@ -3304,7 +3304,7 @@ + session keepalives and then drop them here. + */ + if (FD_ISSET(cli->fd,&fds)) { +- receive_smb(cli->fd,cli->inbuf,0); ++ receive_smb(cli->fd,cli->inbuf,cli->bufsize,0); + goto again; + } + +Index: samba-3.0.24/source/lib/util_sock.c +=================================================================== +--- samba-3.0.24.orig/source/lib/util_sock.c ++++ samba-3.0.24/source/lib/util_sock.c +@@ -654,14 +654,13 @@ + } + + /**************************************************************************** +- Read an smb from a fd. Note that the buffer *MUST* be of size +- BUFFER_SIZE+SAFETY_MARGIN. ++ Read an smb from a fd. + The timeout is in milliseconds. + This function will return on receipt of a session keepalive packet. + Doesn't check the MAC on signed packets. + ****************************************************************************/ + +-BOOL receive_smb_raw(int fd, char *buffer, unsigned int timeout) ++BOOL receive_smb_raw(int fd, char *buffer, size_t buflen, unsigned int timeout) + { + ssize_t len,ret; + +@@ -682,25 +681,18 @@ + return False; + } + +- /* +- * A WRITEX with CAP_LARGE_WRITEX can be 64k worth of data plus 65 bytes +- * of header. Don't print the error if this fits.... JRA. +- */ +- +- if (len > (BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE)) { ++ if (len > buflen) { + DEBUG(0,("Invalid packet length! (%lu bytes).\n",(unsigned long)len)); +- if (len > BUFFER_SIZE + (SAFETY_MARGIN/2)) { + +- /* +- * Correct fix. smb_read_error may have already been +- * set. Only set it here if not already set. Global +- * variables still suck :-). JRA. +- */ ++ /* ++ * smb_read_error may have already been ++ * set. Only set it here if not already set. Global ++ * variables still suck :-). JRA. ++ */ + +- if (smb_read_error == 0) +- smb_read_error = READ_ERROR; +- return False; +- } ++ if (smb_read_error == 0) ++ smb_read_error = READ_ERROR; ++ return False; + } + + if(len > 0) { +@@ -730,9 +722,9 @@ + Checks the MAC on signed packets. + ****************************************************************************/ + +-BOOL receive_smb(int fd, char *buffer, unsigned int timeout) ++BOOL receive_smb(int fd, char *buffer, size_t buflen, unsigned int timeout) + { +- if (!receive_smb_raw(fd, buffer, timeout)) { ++ if (!receive_smb_raw(fd, buffer, buflen, timeout)) { + return False; + } + +Index: samba-3.0.24/source/libsmb/clientgen.c +=================================================================== +--- samba-3.0.24.orig/source/libsmb/clientgen.c ++++ samba-3.0.24/source/libsmb/clientgen.c +@@ -42,8 +42,7 @@ + } + + /**************************************************************************** +- Read an smb from a fd ignoring all keepalive packets. Note that the buffer +- *MUST* be of size BUFFER_SIZE+SAFETY_MARGIN. ++ Read an smb from a fd ignoring all keepalive packets. + The timeout is in milliseconds + + This is exactly the same as receive_smb except that it never returns +@@ -52,12 +51,12 @@ + should never go into a blocking read. + ****************************************************************************/ + +-static BOOL client_receive_smb(int fd,char *buffer, unsigned int timeout) ++static BOOL client_receive_smb(int fd,char *buffer, size_t bufsize, unsigned int timeout) + { + BOOL ret; + + for(;;) { +- ret = receive_smb_raw(fd, buffer, timeout); ++ ret = receive_smb_raw(fd, buffer, bufsize, timeout); + + if (!ret) { + DEBUG(10,("client_receive_smb failed\n")); +@@ -87,7 +86,7 @@ + return False; + + again: +- ret = client_receive_smb(cli->fd,cli->inbuf,cli->timeout); ++ ret = client_receive_smb(cli->fd,cli->inbuf, cli->bufsize, cli->timeout); + + if (ret) { + /* it might be an oplock break request */ +Index: samba-3.0.24/source/smbd/process.c +=================================================================== +--- samba-3.0.24.orig/source/smbd/process.c ++++ samba-3.0.24/source/smbd/process.c +@@ -508,7 +508,8 @@ + goto again; + } + +- return receive_smb(smbd_server_fd(), buffer, 0); ++ return receive_smb(smbd_server_fd(), buffer, ++ BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE, 0); + } + + /* +Index: samba-3.0.24/source/utils/smbfilter.c +=================================================================== +--- samba-3.0.24.orig/source/utils/smbfilter.c ++++ samba-3.0.24/source/utils/smbfilter.c +@@ -140,7 +140,7 @@ + if (num <= 0) continue; + + if (c != -1 && FD_ISSET(c, &fds)) { +- if (!receive_smb(c, packet, 0)) { ++ if (!receive_smb(c, packet, BUFFER_SIZE, 0)) { + d_printf("client closed connection\n"); + exit(0); + } +@@ -151,7 +151,7 @@ + } + } + if (s != -1 && FD_ISSET(s, &fds)) { +- if (!receive_smb(s, packet, 0)) { ++ if (!receive_smb(s, packet, BUFFER_SIZE, 0)) { + d_printf("server closed connection\n"); + exit(0); + }
signature.asc
Description: Digital signature