Linux 2.6.13.1
Subsystems (12)
We (the -stable team) are announcing the release of the 2.6.13.1 kernel.
The diffstat and short summary of the fixes are below.
I'll also be replying to this message with a copy of the patch between 2.6.13 and 2.6.13.1, as it is small enough to do so.
The updated 2.6.13.y git tree can be found at:
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/chrisw/linux-2.6.13.y.git
and can be browsed at the normal kernel.org git web browser:
www.kernel.org/git/
thanks,
-chris
----------
Makefile | 2 - arch/i386/pci/common.c | 1 arch/i386/pci/i386.c | 49 +++++++++++++----------------------------- crypto/cipher.c | 12 +++++++--- drivers/char/rtc.c | 5 +--- drivers/media/video/Kconfig | 1 drivers/pci/rom.c | 24 ++++++++++++++------ drivers/pci/setup-bus.c | 2 - drivers/scsi/aacraid/aachba.c | 2 - include/net/compat.h | 5 ++-- net/compat.c | 44 ++++++++++++++++++++++--------------- net/core/filter.c | 6 ++--- net/ipv4/ip_fragment.c | 2 - net/ipv4/raw.c | 2 - net/ipv6/raw.c | 2 - net/socket.c | 3 +- 16 files changed, 85 insertions(+), 77 deletions(-)
Summary of changes from v2.6.13 to v2.6.13.1
============================================
Al Viro:
raw_sendmsg DoS (CAN-2005-2492)
Benjamin Herrenschmidt:
Fix PCI ROM mapping
Chris Wright:
Linux 2.6.13.1
David S. Miller:
Use SA_SHIRQ in sparc specific code.
David Woodhouse:
32bit sendmsg() flaw (CAN-2005-2490)
Herbert Xu:
2.6.13 breaks libpcap (and tcpdump)
Fix boundary check in standard multi-block cipher processors
Ivan Kokshaysky:
x86: pci_assign_unassigned_resources() update
Mark Haverkamp:
aacraid: 2.6.13 aacraid bad BUG_ON fix
Michael Krufky:
Kconfig: saa7134-dvb must select tda1004x
Stephen Hemminger:
Reassembly trim not clearing CHECKSUM_HW
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 13 -EXTRAVERSION = +EXTRAVERSION = .1 NAME=Woozy Numbat # *DOCUMENTATION*
arch/i386/pci/common.c +0 -1
@@ -165,7 +165,6 @@ static int __init pcibios_init(void)if ((pci_probe &PCI_BIOS_SORT ) && !(pci_probe &PCI_NO_SORT ))pcibios_sort ();#endif -pci_assign_unassigned_resources ();return 0 ; }
arch/i386/pci/i386.c +16 -33
59 lines not on this page · raw message
crypto/cipher.c +9 -3
@@ -191,6 +191,8 @@ static unsigned int cbc_process_encrypt(u8 *iv = desc->info;unsigned int done =0 ; + nbytes -= bsize; + do { xor(iv, src); fn(crypto_tfm_ctx(tfm), dst, iv);
@@ -198,7 +200,7 @@ static unsigned int cbc_process_encrypt( src += bsize; dst += bsize; - }while ((done += bsize) < nbytes); + }while ((done += bsize) <= nbytes);return done; }
@@ -219,6 +221,8 @@ static unsigned int cbc_process_decrypt(u8 *iv = desc->info;unsigned int done =0 ; + nbytes -= bsize; + do { u8 *tmp_dst = *dst_p;
@@ -230,7 +234,7 @@ static unsigned int cbc_process_decrypt( src += bsize; dst += bsize; - }while ((done += bsize) < nbytes); + }while ((done += bsize) <= nbytes);return done; }
@@ -243,12 +247,14 @@ static unsigned int ecb_process(const stvoid (*fn)(void *,u8 *,const u8 *) = desc->crfn;unsigned int done =0 ; + nbytes -= bsize; +do {fn (crypto_tfm_ctx (tfm), dst, src); src += bsize; dst += bsize; - }while ((done += bsize) < nbytes); + }while ((done += bsize) <= nbytes);return done; }
drivers/char/rtc.c +2 -3
@@ -938,10 +938,9 @@ found:/* * XXX Interrupt pin #7 in Espresso is shared between RTC and -* PCI Slot 2 INTA# (and some INTx# in Slot 1). SA_INTERRUPT here -* is asking for trouble with add-on boards. Change to SA_SHIRQ. +* PCI Slot 2 INTA# (and some INTx# in Slot 1). */ -if (request_irq (rtc_irq, rtc_interrupt,SA_INTERRUPT ,"rtc" , (void *)&rtc_port)) { +if (request_irq (rtc_irq, rtc_interrupt,SA_SHIRQ ,"rtc" , (void *)&rtc_port)) {/* * Standard way for sparc to print irq's is to use * __irq_itoa(). I think for EBus it's ok to use %d.
drivers/media/video/Kconfig +1 -0
@@ -254,6 +254,7 @@ config VIDEO_SAA7134_DVB select VIDEO_BUF_DVB select DVB_MT352 select DVB_CX22702 + select DVB_TDA1004X ---help--- This adds support for DVB cards based on the Philips saa7134 chip.
drivers/pci/rom.c +17 -7
@@ -21,13 +21,21 @@* between the ROM and other resources, so enabling it may disable access * to MMIO registers or other card memory. */ -static void pci_enable_rom (struct pci_dev *pdev) +static int pci_enable_rom (struct pci_dev *pdev) { +struct resource *res = pdev->resource +PCI_ROM_RESOURCE ; +struct pci_bus_region region;u32 rom_addr; +if (!res->flags) +return -1 ; + +pcibios_resource_to_bus (pdev, ®ion, res);pci_read_config_dword (pdev, pdev->rom_base_reg, &rom_addr); - rom_addr |=PCI_ROM_ADDRESS_ENABLE ; + rom_addr &= ~PCI_ROM_ADDRESS_MASK ; + rom_addr |= region.start |PCI_ROM_ADDRESS_ENABLE ;pci_write_config_dword (pdev, pdev->rom_base_reg, rom_addr); +return 0 ; }/**
@@ -71,19 +79,21 @@ void __iomem *pci_map_rom(struct pci_dev }else {if (res->flags &IORESOURCE_ROM_COPY ) { *size =pci_resource_len (pdev,PCI_ROM_RESOURCE ); -return (void __iomem *)pci_resource_start (pdev,PCI_ROM_RESOURCE ); +return (void __iomem *)pci_resource_start (pdev, +PCI_ROM_RESOURCE ); }else {/* assign the ROM an address if it doesn't have one */ -if (res->parent ==NULL ) -pci_assign_resource (pdev,PCI_ROM_RESOURCE ); - +if (res->parent ==NULL && +pci_assign_resource (pdev,PCI_ROM_RESOURCE )) +return NULL ; start =pci_resource_start (pdev,PCI_ROM_RESOURCE ); *size =pci_resource_len (pdev,PCI_ROM_RESOURCE );if (*size ==0 )return NULL ;/* Enable ROM space decodes */ -pci_enable_rom (pdev); +if (pci_enable_rom (pdev)) +return NULL ; } }
drivers/pci/setup-bus.c +1 -1
@@ -40,7 +40,7 @@* FIXME: IO should be max 256 bytes. However, since we may * have a P2P bridge below a cardbus bridge, we need 4K. */ -#define CARDBUS_IO_SIZE (256) +#define CARDBUS_IO_SIZE (4*1024)#define CARDBUS_MEM_SIZE (32*1024*1024) static void __devinit
drivers/scsi/aacraid/aachba.c +1 -1
@@ -968,7 +968,7 @@ static int aac_read(struct scsi_cmnd * s fibsize =sizeof (struct aac_read64 ) + ((le32_to_cpu (readcmd->sg.count) -1 ) *sizeof (struct sgentry64 )); -BUG_ON (fibsize > (sizeof (struct hw_fib ) - +BUG_ON (fibsize > (dev->max_fib_size -sizeof (struct aac_fibhdr )));/* * Now send the Fib to the adapter
include/net/compat.h +3 -2
@@ -33,7 +33,8 @@ extern asmlinkage long compat_sys_sendmsextern asmlinkage long compat_sys_recvmsg (int ,struct compat_msghdr __user *,unsigned );extern asmlinkage long compat_sys_getsockopt (int ,int ,int ,char __user *,int __user *);extern int put_cmsg_compat (struct msghdr *,int ,int ,int ,void *); -extern int cmsghdr_from_user_compat_to_kern (struct msghdr *,unsigned char *, -int ); + +struct sock ; +extern int cmsghdr_from_user_compat_to_kern (struct msghdr *,struct sock *,unsigned char *,int );#endif /* NET_COMPAT_H */
net/compat.c +26 -18
85 lines not on this page · raw message
net/core/filter.c +3 -3
@@ -182,7 +182,7 @@ int sk_run_filter(struct sk_buff *skb, sA =ntohl (*(u32 *)ptr);continue ; } -return 0 ; +break ;case BPF_LD |BPF_H |BPF_ABS : k = fentry->k; load_h:
@@ -191,7 +191,7 @@ int sk_run_filter(struct sk_buff *skb, sA =ntohs (*(u16 *)ptr);continue ; } -return 0 ; +break ;case BPF_LD |BPF_B |BPF_ABS : k = fentry->k; load_b:
@@ -200,7 +200,7 @@ load_b:A = *(u8 *)ptr;continue ; } -return 0 ; +break ;case BPF_LD |BPF_W |BPF_LEN :A = skb->len;continue ;
net/ipv4/ip_fragment.c +1 -1
@@ -457,7 +457,7 @@ static void ip_frag_queue(struct ipq *qpif (pskb_pull (skb, ihl) ==NULL ) goto err; -if (pskb_trim (skb, end-offset)) +if (pskb_trim_rcsum (skb, end-offset)) goto err;/* Find out which fragments are in front and at the back of us
net/ipv4/raw.c +1 -1
@@ -358,7 +358,7 @@ static void raw_probe_proto_opt(struct fif (type && code) {get_user (fl->fl_icmp_type, type); -__get_user (fl->fl_icmp_code, code); +get_user (fl->fl_icmp_code, code); probed =1 ; }break ;
net/ipv6/raw.c +1 -1
@@ -619,7 +619,7 @@ static void rawv6_probe_proto_opt(structif (type && code) {get_user (fl->fl_icmp_type, type); -__get_user (fl->fl_icmp_code, code); +get_user (fl->fl_icmp_code, code); probed =1 ; }break ;
net/socket.c +2 -1
@@ -1739,10 +1739,11 @@ asmlinkage long sys_sendmsg(int fd, stru goto out_freeiov; ctl_len = msg_sys.msg_controllen;if ((MSG_CMSG_COMPAT & flags) && ctl_len) { - err =cmsghdr_from_user_compat_to_kern (&msg_sys, ctl,sizeof (ctl)); + err =cmsghdr_from_user_compat_to_kern (&msg_sys, sock->sk, ctl,sizeof (ctl));if (err) goto out_freeiov; ctl_buf = msg_sys.msg_control; + ctl_len = msg_sys.msg_controllen; }else if (ctl_len) {if (ctl_len >sizeof (ctl)) {
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 13 -EXTRAVERSION = +EXTRAVERSION = .1 NAME=Woozy Numbat # *DOCUMENTATION*
arch/i386/pci/common.c +0 -1
@@ -165,7 +165,6 @@ static int __init pcibios_init(void)if ((pci_probe &PCI_BIOS_SORT ) && !(pci_probe &PCI_NO_SORT ))pcibios_sort ();#endif -pci_assign_unassigned_resources ();return 0 ; }
arch/i386/pci/i386.c +16 -33
59 lines not on this page · raw message
crypto/cipher.c +9 -3
@@ -191,6 +191,8 @@ static unsigned int cbc_process_encrypt(u8 *iv = desc->info;unsigned int done =0 ; + nbytes -= bsize; + do { xor(iv, src); fn(crypto_tfm_ctx(tfm), dst, iv);
@@ -198,7 +200,7 @@ static unsigned int cbc_process_encrypt( src += bsize; dst += bsize; - }while ((done += bsize) < nbytes); + }while ((done += bsize) <= nbytes);return done; }
@@ -219,6 +221,8 @@ static unsigned int cbc_process_decrypt(u8 *iv = desc->info;unsigned int done =0 ; + nbytes -= bsize; + do { u8 *tmp_dst = *dst_p;
@@ -230,7 +234,7 @@ static unsigned int cbc_process_decrypt( src += bsize; dst += bsize; - }while ((done += bsize) < nbytes); + }while ((done += bsize) <= nbytes);return done; }
@@ -243,12 +247,14 @@ static unsigned int ecb_process(const stvoid (*fn)(void *,u8 *,const u8 *) = desc->crfn;unsigned int done =0 ; + nbytes -= bsize; +do {fn (crypto_tfm_ctx (tfm), dst, src); src += bsize; dst += bsize; - }while ((done += bsize) < nbytes); + }while ((done += bsize) <= nbytes);return done; }
drivers/char/rtc.c +2 -3
@@ -938,10 +938,9 @@ found:/* * XXX Interrupt pin #7 in Espresso is shared between RTC and -* PCI Slot 2 INTA# (and some INTx# in Slot 1). SA_INTERRUPT here -* is asking for trouble with add-on boards. Change to SA_SHIRQ. +* PCI Slot 2 INTA# (and some INTx# in Slot 1). */ -if (request_irq (rtc_irq, rtc_interrupt,SA_INTERRUPT ,"rtc" , (void *)&rtc_port)) { +if (request_irq (rtc_irq, rtc_interrupt,SA_SHIRQ ,"rtc" , (void *)&rtc_port)) {/* * Standard way for sparc to print irq's is to use * __irq_itoa(). I think for EBus it's ok to use %d.
drivers/media/video/Kconfig +1 -0
@@ -254,6 +254,7 @@ config VIDEO_SAA7134_DVB select VIDEO_BUF_DVB select DVB_MT352 select DVB_CX22702 + select DVB_TDA1004X ---help--- This adds support for DVB cards based on the Philips saa7134 chip.
drivers/pci/rom.c +17 -7
@@ -21,13 +21,21 @@* between the ROM and other resources, so enabling it may disable access * to MMIO registers or other card memory. */ -static void pci_enable_rom (struct pci_dev *pdev) +static int pci_enable_rom (struct pci_dev *pdev) { +struct resource *res = pdev->resource +PCI_ROM_RESOURCE ; +struct pci_bus_region region;u32 rom_addr; +if (!res->flags) +return -1 ; + +pcibios_resource_to_bus (pdev, ®ion, res);pci_read_config_dword (pdev, pdev->rom_base_reg, &rom_addr); - rom_addr |=PCI_ROM_ADDRESS_ENABLE ; + rom_addr &= ~PCI_ROM_ADDRESS_MASK ; + rom_addr |= region.start |PCI_ROM_ADDRESS_ENABLE ;pci_write_config_dword (pdev, pdev->rom_base_reg, rom_addr); +return 0 ; }/**
@@ -71,19 +79,21 @@ void __iomem *pci_map_rom(struct pci_dev }else {if (res->flags &IORESOURCE_ROM_COPY ) { *size =pci_resource_len (pdev,PCI_ROM_RESOURCE ); -return (void __iomem *)pci_resource_start (pdev,PCI_ROM_RESOURCE ); +return (void __iomem *)pci_resource_start (pdev, +PCI_ROM_RESOURCE ); }else {/* assign the ROM an address if it doesn't have one */ -if (res->parent ==NULL ) -pci_assign_resource (pdev,PCI_ROM_RESOURCE ); - +if (res->parent ==NULL && +pci_assign_resource (pdev,PCI_ROM_RESOURCE )) +return NULL ; start =pci_resource_start (pdev,PCI_ROM_RESOURCE ); *size =pci_resource_len (pdev,PCI_ROM_RESOURCE );if (*size ==0 )return NULL ;/* Enable ROM space decodes */ -pci_enable_rom (pdev); +if (pci_enable_rom (pdev)) +return NULL ; } }
drivers/pci/setup-bus.c +1 -1
@@ -40,7 +40,7 @@* FIXME: IO should be max 256 bytes. However, since we may * have a P2P bridge below a cardbus bridge, we need 4K. */ -#define CARDBUS_IO_SIZE (256) +#define CARDBUS_IO_SIZE (4*1024)#define CARDBUS_MEM_SIZE (32*1024*1024) static void __devinit
drivers/scsi/aacraid/aachba.c +1 -1
@@ -968,7 +968,7 @@ static int aac_read(struct scsi_cmnd * s fibsize =sizeof (struct aac_read64 ) + ((le32_to_cpu (readcmd->sg.count) -1 ) *sizeof (struct sgentry64 )); -BUG_ON (fibsize > (sizeof (struct hw_fib ) - +BUG_ON (fibsize > (dev->max_fib_size -sizeof (struct aac_fibhdr )));/* * Now send the Fib to the adapter
include/net/compat.h +3 -2
@@ -33,7 +33,8 @@ extern asmlinkage long compat_sys_sendmsextern asmlinkage long compat_sys_recvmsg (int ,struct compat_msghdr __user *,unsigned );extern asmlinkage long compat_sys_getsockopt (int ,int ,int ,char __user *,int __user *);extern int put_cmsg_compat (struct msghdr *,int ,int ,int ,void *); -extern int cmsghdr_from_user_compat_to_kern (struct msghdr *,unsigned char *, -int ); + +struct sock ; +extern int cmsghdr_from_user_compat_to_kern (struct msghdr *,struct sock *,unsigned char *,int );#endif /* NET_COMPAT_H */
net/compat.c +26 -18
85 lines not on this page · raw message
net/core/filter.c +3 -3
@@ -182,7 +182,7 @@ int sk_run_filter(struct sk_buff *skb, sA =ntohl (*(u32 *)ptr);continue ; } -return 0 ; +break ;case BPF_LD |BPF_H |BPF_ABS : k = fentry->k; load_h:
@@ -191,7 +191,7 @@ int sk_run_filter(struct sk_buff *skb, sA =ntohs (*(u16 *)ptr);continue ; } -return 0 ; +break ;case BPF_LD |BPF_B |BPF_ABS : k = fentry->k; load_b:
@@ -200,7 +200,7 @@ load_b:A = *(u8 *)ptr;continue ; } -return 0 ; +break ;case BPF_LD |BPF_W |BPF_LEN :A = skb->len;continue ;
net/ipv4/ip_fragment.c +1 -1
@@ -457,7 +457,7 @@ static void ip_frag_queue(struct ipq *qpif (pskb_pull (skb, ihl) ==NULL ) goto err; -if (pskb_trim (skb, end-offset)) +if (pskb_trim_rcsum (skb, end-offset)) goto err;/* Find out which fragments are in front and at the back of us
net/ipv4/raw.c +1 -1
@@ -358,7 +358,7 @@ static void raw_probe_proto_opt(struct fif (type && code) {get_user (fl->fl_icmp_type, type); -__get_user (fl->fl_icmp_code, code); +get_user (fl->fl_icmp_code, code); probed =1 ; }break ;
net/ipv6/raw.c +1 -1
@@ -619,7 +619,7 @@ static void rawv6_probe_proto_opt(structif (type && code) {get_user (fl->fl_icmp_type, type); -__get_user (fl->fl_icmp_code, code); +get_user (fl->fl_icmp_code, code); probed =1 ; }break ;
net/socket.c +2 -1
@@ -1739,10 +1739,11 @@ asmlinkage long sys_sendmsg(int fd, stru goto out_freeiov; ctl_len = msg_sys.msg_controllen;if ((MSG_CMSG_COMPAT & flags) && ctl_len) { - err =cmsghdr_from_user_compat_to_kern (&msg_sys, ctl,sizeof (ctl)); + err =cmsghdr_from_user_compat_to_kern (&msg_sys, sock->sk, ctl,sizeof (ctl));if (err) goto out_freeiov; ctl_buf = msg_sys.msg_control; + ctl_len = msg_sys.msg_controllen; }else if (ctl_len) {if (ctl_len >sizeof (ctl)) {