From b3b9291b1bbc0c7f0d62b1f4ac12433655e73ca5 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 23 Nov 2007 15:12:13 -0500 Subject: [PATCH] Linux 2.0.37pre8 o Fixed a small multicast problem (Alan Cox) o PIII disable serial ID (Alan Cox, from Phil Karns code) --- arch/i386/kernel/setup.c | 2 +- drivers/sound/local.h | 45 ---------------------------------------- include/asm-i386/bugs.h | 38 +++++++++++++++++++++++++++++++++ net/ipv4/ip_sockglue.c | 22 +++++++++++++------- 4 files changed, 54 insertions(+), 53 deletions(-) delete mode 100644 drivers/sound/local.h diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index 2c4dd0da5fae..36e0e7113594 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c @@ -463,7 +463,7 @@ int get_cpuinfo(char * buffer) static const char *x86_ext_cap_flags[] = { "fpu","vme", "de", "pse", "tsc", "msr", "6", "mce", "cx8", "9", "10", "syscr", "12", "pge", "14", "cmov", - "fpcmov", "17", "18", "19", "20", "21", "22", "mmx", + "fpcmov", "17", "psn", "19", "20", "21", "22", "mmx", "emmx", "25", "26", "27", "28", "29", "30", "3dnow" }; diff --git a/drivers/sound/local.h b/drivers/sound/local.h deleted file mode 100644 index bdf1703b8d2b..000000000000 --- a/drivers/sound/local.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Computer generated file. Please don't edit! */ - -#define KERNEL_COMPATIBLE_CONFIG - -#define SELECTED_SOUND_OPTIONS 0x00000000 - -#if \ - defined(CONFIG_PSS) || defined(CONFIG_SSCAPE) || \ - defined(CONFIG_CS4232) || defined(CONFIG_MAUI) -# define CONFIG_MPU_EMU -#endif - -#if \ - defined(CONFIG_PSS) || defined(CONFIG_GUS16) || \ - defined(CONFIG_GUSMAX) || defined(CONFIG_MSS) || \ - defined(CONFIG_SSCAPE) || defined(CONFIG_TRIX) || \ - defined(CONFIG_MAD16) || defined(CONFIG_CS4232) -# define CONFIG_AD1848 -#endif - -#if \ - defined(CONFIG_SB) || defined(CONFIG_TRIX) || \ - defined(CONFIG_MAD16) -# define CONFIG_SBDSP -#endif - -#if \ - defined(CONFIG_SB) || defined(CONFIG_TRIX) || \ - defined(CONFIG_MAD16) -# define CONFIG_UART401 -#endif - -#if \ - defined(CONFIG_PAS) || defined(CONFIG_SB) || \ - defined(CONFIG_ADLIB) || defined(CONFIG_GUS) || \ - defined(CONFIG_MPU401) || defined(CONFIG_PSS) || \ - defined(CONFIG_SSCAPE) || defined(CONFIG_TRIX) || \ - defined(CONFIG_MAD16) || defined(CONFIG_CS4232) || \ - defined(CONFIG_MAUI) -# define CONFIG_SEQUENCER -#endif - -#define SOUND_CONFIG_DATE "Fri Jan 29 15:33:26 GMT 1999" -#define SOUND_CONFIG_BY "root" -#define SOUND_UNAME_A "Linux roadrunner.swansea.linux.org.uk 2.2.1-ac1 #105 Thu Jan 28 22:19:39 GMT 1999 i686 unknown" diff --git a/include/asm-i386/bugs.h b/include/asm-i386/bugs.h index 6e26f6b28f23..e4a67d22fe6b 100644 --- a/include/asm-i386/bugs.h +++ b/include/asm-i386/bugs.h @@ -132,6 +132,24 @@ static void check_tlb(void) extern int pentium_f00f_bug; extern void trap_init_f00f_bug(void); +/* + * Access to machine-specific registers (available on 586 and better only) + * Note: the rd* operations modify the parameters directly (without using + * pointer indirection), this allows gcc to optimize better + * Code from Richard Gooch's 2.2 MTRR drivers. + */ + +#define rdmsr(msr,val1,val2) \ + __asm__ __volatile__("rdmsr" \ + : "=a" (val1), "=d" (val2) \ + : "c" (msr)) + +#define wrmsr(msr,val1,val2) \ + __asm__ __volatile__("wrmsr" \ + : /* no outputs */ \ + : "c" (msr), "a" (val1), "d" (val2)) + + static void check_pentium_f00f(void) { /* @@ -145,6 +163,26 @@ static void check_pentium_f00f(void) } } +static void check_privacy(void) +{ + /* + * Pentium III or higher - processors with mtrrs/cpuid + */ + if(memcmp(x86_vendor_id, "GenuineIntel", 12)) + return; + if(x86_capability & (1<<18)) + { + /* + * Thanks to Phil Karn for this bit. + */ + unsigned long lo,hi; + rdmsr(0x119,lo,hi); + lo |= 0x200000; + wrmsr(0x119,lo,hi); + printk(KERN_INFO "Pentium-III serial number disabled.\n"); + } +} + /* * B step AMD K6 before B 9730xxxx have hardware bugs that can cause * misexecution of code under Linux. Owners of such processors should diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 6784ca56b963..aba62f3728d6 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -455,9 +455,6 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt int ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *optlen) { int val,err; -#ifdef CONFIG_IP_MULTICAST - int len; -#endif if(level!=SOL_IP) return -EOPNOTSUPP; @@ -541,16 +538,27 @@ int ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *op val=sk->ip_mc_loop; break; case IP_MULTICAST_IF: + { + struct device *dev; + struct in_addr ia; + err=verify_area(VERIFY_WRITE, optlen, sizeof(int)); if(err) return err; - len=strlen(sk->ip_mc_name); - err=verify_area(VERIFY_WRITE, optval, len); + err=verify_area(VERIFY_WRITE, optval, sizeof(ia)); if(err) return err; - put_user(len,(int *) optlen); - memcpy_tofs((void *)optval,sk->ip_mc_name, len); + + dev=dev_get(sk->ip_mc_name); + /* Someone ran off with the interface, its probably + been downed. */ + if(dev==NULL) + return -ENODEV; + ia.s_addr = dev->pa_addr; + put_user(sizeof(ia),(int *) optlen); + memcpy_tofs((void *)optval, &ia, sizeof(ia)); return 0; + } #endif default: return(-ENOPROTOOPT); -- 2.39.5