Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge ../linux-2.6

+154 -104
+35 -31
Documentation/sysrq.txt
··· 1 1 Linux Magic System Request Key Hacks 2 - Documentation for sysrq.c version 1.15 3 - Last update: $Date: 2001/01/28 10:15:59 $ 2 + Documentation for sysrq.c 3 + Last update: 2007-JAN-06 4 4 5 5 * What is the magic SysRq key? 6 6 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ··· 35 35 36 36 Note that the value of /proc/sys/kernel/sysrq influences only the invocation 37 37 via a keyboard. Invocation of any operation via /proc/sysrq-trigger is always 38 - allowed. 38 + allowed (by a user with admin privileges). 39 39 40 40 * How do I use the magic SysRq key? 41 41 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ··· 58 58 On other - If you know of the key combos for other architectures, please 59 59 let me know so I can add them to this section. 60 60 61 - On all - write a character to /proc/sysrq-trigger. eg: 61 + On all - write a character to /proc/sysrq-trigger. e.g.: 62 62 63 63 echo t > /proc/sysrq-trigger 64 64 ··· 74 74 75 75 'c' - Will perform a kexec reboot in order to take a crashdump. 76 76 77 + 'd' - Shows all locks that are held. 78 + 77 79 'o' - Will shut your system off (if configured and supported). 78 80 79 81 's' - Will attempt to sync all mounted filesystems. ··· 89 87 90 88 'm' - Will dump current memory info to your console. 91 89 90 + 'n' - Used to make RT tasks nice-able 91 + 92 92 'v' - Dumps Voyager SMP processor info to your console. 93 + 94 + 'w' - Dumps tasks that are in uninterruptable (blocked) state. 95 + 96 + 'x' - Used by xmon interface on ppc/powerpc platforms. 93 97 94 98 '0'-'9' - Sets the console log level, controlling which kernel messages 95 99 will be printed to your console. ('0', for example would make 96 100 it so that only emergency messages like PANICs or OOPSes would 97 101 make it to your console.) 98 102 99 - 'f' - Will call oom_kill to kill a memory hog process 103 + 'f' - Will call oom_kill to kill a memory hog process. 100 104 101 105 'e' - Send a SIGTERM to all processes, except for init. 102 106 107 + 'g' - Used by kgdb on ppc platforms. 108 + 103 109 'i' - Send a SIGKILL to all processes, except for init. 104 110 105 - 'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system 106 - will be non-functional after this.) 107 - 108 - 'h' - Will display help ( actually any other key than those listed 111 + 'h' - Will display help (actually any other key than those listed 109 112 above will display help. but 'h' is easy to remember :-) 110 113 111 114 * Okay, so what can I use them for? 112 115 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 113 116 Well, un'R'aw is very handy when your X server or a svgalib program crashes. 114 117 115 - sa'K' (Secure Access Key) is useful when you want to be sure there are no 116 - trojan program is running at console and which could grab your password 117 - when you would try to login. It will kill all programs on given console 118 - and thus letting you make sure that the login prompt you see is actually 118 + sa'K' (Secure Access Key) is useful when you want to be sure there is no 119 + trojan program running at console which could grab your password 120 + when you would try to login. It will kill all programs on given console, 121 + thus letting you make sure that the login prompt you see is actually 119 122 the one from init, not some trojan program. 120 123 IMPORTANT: In its true form it is not a true SAK like the one in a :IMPORTANT 121 124 IMPORTANT: c2 compliant system, and it should not be mistaken as :IMPORTANT 122 125 IMPORTANT: such. :IMPORTANT 123 - It seems other find it useful as (System Attention Key) which is 126 + It seems others find it useful as (System Attention Key) which is 124 127 useful when you want to exit a program that will not let you switch consoles. 125 128 (For example, X or a svgalib program.) 126 129 ··· 146 139 Again, the unmount (remount read-only) hasn't taken place until you see the 147 140 "OK" and "Done" message appear on the screen. 148 141 149 - The loglevel'0'-'9' is useful when your console is being flooded with 150 - kernel messages you do not want to see. Setting '0' will prevent all but 142 + The loglevels '0'-'9' are useful when your console is being flooded with 143 + kernel messages you do not want to see. Selecting '0' will prevent all but 151 144 the most urgent kernel messages from reaching your console. (They will 152 145 still be logged if syslogd/klogd are alive, though.) 153 146 ··· 159 152 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 160 153 That happens to me, also. I've found that tapping shift, alt, and control 161 154 on both sides of the keyboard, and hitting an invalid sysrq sequence again 162 - will fix the problem. (ie, something like alt-sysrq-z). Switching to another 155 + will fix the problem. (i.e., something like alt-sysrq-z). Switching to another 163 156 virtual console (ALT+Fn) and then back again should also help. 164 157 165 158 * I hit SysRq, but nothing seems to happen, what's wrong? ··· 181 174 prints help, and C) an action_msg string, that will print right before your 182 175 handler is called. Your handler must conform to the prototype in 'sysrq.h'. 183 176 184 - After the sysrq_key_op is created, you can call the macro 185 - register_sysrq_key(int key, struct sysrq_key_op *op_p) that is defined in 186 - sysrq.h, this will register the operation pointed to by 'op_p' at table 187 - key 'key', if that slot in the table is blank. At module unload time, you must 188 - call the macro unregister_sysrq_key(int key, struct sysrq_key_op *op_p), which 177 + After the sysrq_key_op is created, you can call the kernel function 178 + register_sysrq_key(int key, struct sysrq_key_op *op_p); this will 179 + register the operation pointed to by 'op_p' at table key 'key', 180 + if that slot in the table is blank. At module unload time, you must call 181 + the function unregister_sysrq_key(int key, struct sysrq_key_op *op_p), which 189 182 will remove the key op pointed to by 'op_p' from the key 'key', if and only if 190 183 it is currently registered in that slot. This is in case the slot has been 191 184 overwritten since you registered it. ··· 193 186 The Magic SysRQ system works by registering key operations against a key op 194 187 lookup table, which is defined in 'drivers/char/sysrq.c'. This key table has 195 188 a number of operations registered into it at compile time, but is mutable, 196 - and 4 functions are exported for interface to it: __sysrq_lock_table, 197 - __sysrq_unlock_table, __sysrq_get_key_op, and __sysrq_put_key_op. The 198 - functions __sysrq_swap_key_ops and __sysrq_swap_key_ops_nolock are defined 199 - in the header itself, and the REGISTER and UNREGISTER macros are built from 200 - these. More complex (and dangerous!) manipulations of the table are possible 201 - using these functions, but you must be careful to always lock the table before 202 - you read or write from it, and to unlock it again when you are done. (And of 203 - course, to never ever leave an invalid pointer in the table). Null pointers in 204 - the table are always safe :) 189 + and 2 functions are exported for interface to it: 190 + register_sysrq_key and unregister_sysrq_key. 191 + Of course, never ever leave an invalid pointer in the table. I.e., when 192 + your module that called register_sysrq_key() exits, it must call 193 + unregister_sysrq_key() to clean up the sysrq key table entry that it used. 194 + Null pointers in the table are always safe. :) 205 195 206 196 If for some reason you feel the need to call the handle_sysrq function from 207 197 within a function called by handle_sysrq, you must be aware that you are in
+1 -7
MAINTAINERS
··· 598 598 S: Maintained 599 599 600 600 ATMEL MACB ETHERNET DRIVER 601 - P: Atmel AVR32 Support Team 602 - M: avr32@atmel.com 603 601 P: Haavard Skinnemoen 604 602 M: hskinnemoen@atmel.com 605 603 S: Supported ··· 618 620 S: Maintained 619 621 620 622 AVR32 ARCHITECTURE 621 - P: Atmel AVR32 Support Team 622 - M: avr32@atmel.com 623 623 P: Haavard Skinnemoen 624 624 M: hskinnemoen@atmel.com 625 625 W: http://www.atmel.com/products/AVR32/ ··· 626 630 S: Supported 627 631 628 632 AVR32/AT32AP MACHINE SUPPORT 629 - P: Atmel AVR32 Support Team 630 - M: avr32@atmel.com 631 633 P: Haavard Skinnemoen 632 634 M: hskinnemoen@atmel.com 633 635 S: Supported ··· 2282 2288 P: Patrick McHardy 2283 2289 M: kaber@trash.net 2284 2290 L: netfilter-devel@lists.netfilter.org 2285 - L: netfilter@lists.netfilter.org 2291 + L: netfilter@lists.netfilter.org (subscribers-only) 2286 2292 L: coreteam@netfilter.org 2287 2293 W: http://www.netfilter.org/ 2288 2294 W: http://www.iptables.org/
+2
arch/i386/boot/compressed/relocs.c
··· 43 43 /* Match found */ 44 44 return 1; 45 45 } 46 + if (strncmp(sym_name, "__crc_", 6) == 0) 47 + return 1; 46 48 return 0; 47 49 } 48 50
+1 -1
arch/i386/mach-default/setup.c
··· 102 102 * along the MCA bus. Use this to hook into that chain if you will need 103 103 * it. 104 104 **/ 105 - void __init mca_nmi_hook(void) 105 + void mca_nmi_hook(void) 106 106 { 107 107 /* If I recall correctly, there's a whole bunch of other things that 108 108 * we can do to check for NMI problems, but that's all I know about
+4 -4
arch/sparc/kernel/smp.c
··· 292 292 293 293 void __init smp_prepare_cpus(unsigned int max_cpus) 294 294 { 295 - extern void smp4m_boot_cpus(void); 296 - extern void smp4d_boot_cpus(void); 295 + extern void __init smp4m_boot_cpus(void); 296 + extern void __init smp4d_boot_cpus(void); 297 297 int i, cpuid, extra; 298 298 299 299 printk("Entering SMP Mode...\n"); ··· 375 375 376 376 int __cpuinit __cpu_up(unsigned int cpu) 377 377 { 378 - extern int smp4m_boot_one_cpu(int); 379 - extern int smp4d_boot_one_cpu(int); 378 + extern int __cpuinit smp4m_boot_one_cpu(int); 379 + extern int __cpuinit smp4d_boot_one_cpu(int); 380 380 int ret=0; 381 381 382 382 switch(sparc_cpu_model) {
+1 -1
arch/sparc/kernel/sun4d_smp.c
··· 164 164 local_flush_cache_all(); 165 165 } 166 166 167 - int smp4d_boot_one_cpu(int i) 167 + int __cpuinit smp4d_boot_one_cpu(int i) 168 168 { 169 169 extern unsigned long sun4d_cpu_startup; 170 170 unsigned long *entry = &sun4d_cpu_startup;
+11 -9
drivers/char/sysrq.c
··· 215 215 } 216 216 static struct sysrq_key_op sysrq_showstate_blocked_op = { 217 217 .handler = sysrq_handle_showstate_blocked, 218 - .help_msg = "showBlockedTasks", 218 + .help_msg = "shoW-blocked-tasks", 219 219 .action_msg = "Show Blocked State", 220 220 .enable_mask = SYSRQ_ENABLE_DUMP, 221 221 }; ··· 315 315 &sysrq_loglevel_op, /* 9 */ 316 316 317 317 /* 318 - * Don't use for system provided sysrqs, it is handled specially on 319 - * sparc and will never arrive 318 + * a: Don't use for system provided sysrqs, it is handled specially on 319 + * sparc and will never arrive. 320 320 */ 321 321 NULL, /* a */ 322 322 &sysrq_reboot_op, /* b */ 323 - &sysrq_crashdump_op, /* c */ 323 + &sysrq_crashdump_op, /* c & ibm_emac driver debug */ 324 324 &sysrq_showlocks_op, /* d */ 325 325 &sysrq_term_op, /* e */ 326 326 &sysrq_moom_op, /* f */ 327 + /* g: May be registered by ppc for kgdb */ 327 328 NULL, /* g */ 328 329 NULL, /* h */ 329 330 &sysrq_kill_op, /* i */ ··· 333 332 NULL, /* l */ 334 333 &sysrq_showmem_op, /* m */ 335 334 &sysrq_unrt_op, /* n */ 336 - /* This will often be registered as 'Off' at init time */ 335 + /* o: This will often be registered as 'Off' at init time */ 337 336 NULL, /* o */ 338 337 &sysrq_showregs_op, /* p */ 339 338 NULL, /* q */ 340 - &sysrq_unraw_op, /* r */ 339 + &sysrq_unraw_op, /* r */ 341 340 &sysrq_sync_op, /* s */ 342 341 &sysrq_showstate_op, /* t */ 343 342 &sysrq_mountro_op, /* u */ 344 - /* May be assigned at init time by SMP VOYAGER */ 343 + /* v: May be registered at init time by SMP VOYAGER */ 345 344 NULL, /* v */ 346 - NULL, /* w */ 347 - &sysrq_showstate_blocked_op, /* x */ 345 + &sysrq_showstate_blocked_op, /* w */ 346 + /* x: May be registered on ppc/powerpc for xmon */ 347 + NULL, /* x */ 348 348 NULL, /* y */ 349 349 NULL /* z */ 350 350 };
+4 -4
drivers/ide/ide.c
··· 1781 1781 return 1; 1782 1782 } 1783 1783 1784 - extern void pnpide_init(void); 1785 - extern void pnpide_exit(void); 1786 - extern void h8300_ide_init(void); 1784 + extern void __init pnpide_init(void); 1785 + extern void __exit pnpide_exit(void); 1786 + extern void __init h8300_ide_init(void); 1787 1787 1788 1788 /* 1789 1789 * probe_for_hwifs() finds/initializes "known" IDE interfaces ··· 2088 2088 return ide_init(); 2089 2089 } 2090 2090 2091 - void cleanup_module (void) 2091 + void __exit cleanup_module (void) 2092 2092 { 2093 2093 int index; 2094 2094
+1 -1
drivers/ide/pci/via82cxxx.c
··· 78 78 u8 rev_max; 79 79 u16 flags; 80 80 } via_isa_bridges[] = { 81 - { "cx7000", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, 81 + { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, 82 82 { "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, 83 83 { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, 84 84 { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
+2
drivers/kvm/vmx.c
··· 1116 1116 1117 1117 if (rdmsr_safe(index, &data_low, &data_high) < 0) 1118 1118 continue; 1119 + if (wrmsr_safe(index, data_low, data_high) < 0) 1120 + continue; 1119 1121 data = data_low | ((u64)data_high << 32); 1120 1122 vcpu->host_msrs[j].index = index; 1121 1123 vcpu->host_msrs[j].reserved = 0;
+3 -3
drivers/net/hamradio/Kconfig
··· 113 113 114 114 config BAYCOM_SER_FDX 115 115 tristate "BAYCOM ser12 fullduplex driver for AX.25" 116 - depends on AX25 116 + depends on AX25 && !S390 117 117 select CRC_CCITT 118 118 ---help--- 119 119 This is one of two drivers for Baycom style simple amateur radio ··· 133 133 134 134 config BAYCOM_SER_HDX 135 135 tristate "BAYCOM ser12 halfduplex driver for AX.25" 136 - depends on AX25 136 + depends on AX25 && !S390 137 137 select CRC_CCITT 138 138 ---help--- 139 139 This is one of two drivers for Baycom style simple amateur radio ··· 181 181 182 182 config YAM 183 183 tristate "YAM driver for AX.25" 184 - depends on AX25 184 + depends on AX25 && !S390 185 185 help 186 186 The YAM is a modem for packet radio which connects to the serial 187 187 port and includes some of the functions of a Terminal Node
+5 -3
drivers/pci/quirks.c
··· 661 661 /* See what bridge we have and find the device ranges */ 662 662 switch (dev->device) { 663 663 case PCI_DEVICE_ID_VIA_82C686: 664 - /* 82C686 is special */ 665 - via_vlink_dev_lo = 7; 666 - via_vlink_dev_hi = 7; 664 + /* The VT82C686 is special, it attaches to PCI and can have 665 + any device number. All its subdevices are functions of 666 + that single device. */ 667 + via_vlink_dev_lo = PCI_SLOT(dev->devfn); 668 + via_vlink_dev_hi = PCI_SLOT(dev->devfn); 667 669 break; 668 670 case PCI_DEVICE_ID_VIA_8237: 669 671 case PCI_DEVICE_ID_VIA_8237A:
+2 -8
drivers/pci/search.c
··· 200 200 * can cause some machines to crash. So here we detect and flag that 201 201 * situation and bail out early. 202 202 */ 203 - if (unlikely(list_empty(&pci_devices))) { 204 - printk(KERN_INFO "pci_find_subsys() called while pci_devices " 205 - "is still empty\n"); 203 + if (unlikely(list_empty(&pci_devices))) 206 204 return NULL; 207 - } 208 205 down_read(&pci_bus_sem); 209 206 n = from ? from->global_list.next : pci_devices.next; 210 207 ··· 275 278 * can cause some machines to crash. So here we detect and flag that 276 279 * situation and bail out early. 277 280 */ 278 - if (unlikely(list_empty(&pci_devices))) { 279 - printk(KERN_NOTICE "pci_get_subsys() called while pci_devices " 280 - "is still empty\n"); 281 + if (unlikely(list_empty(&pci_devices))) 281 282 return NULL; 282 - } 283 283 down_read(&pci_bus_sem); 284 284 n = from ? from->global_list.next : pci_devices.next; 285 285
+1 -1
fs/nfsd/nfsfh.c
··· 269 269 "acc=%x, error=%d\n", 270 270 dentry->d_parent->d_name.name, 271 271 dentry->d_name.name, 272 - access, (error >> 24)); 272 + access, ntohl(error)); 273 273 } 274 274 out: 275 275 if (exp && !IS_ERR(exp))
+11 -1
fs/proc/base.c
··· 2328 2328 { 2329 2329 struct dentry *dentry = filp->f_path.dentry; 2330 2330 struct inode *inode = dentry->d_inode; 2331 - struct task_struct *leader = get_proc_task(inode); 2331 + struct task_struct *leader = NULL; 2332 2332 struct task_struct *task; 2333 2333 int retval = -ENOENT; 2334 2334 ino_t ino; 2335 2335 int tid; 2336 2336 unsigned long pos = filp->f_pos; /* avoiding "long long" filp->f_pos */ 2337 2337 2338 + task = get_proc_task(inode); 2339 + if (!task) 2340 + goto out_no_task; 2341 + rcu_read_lock(); 2342 + if (pid_alive(task)) { 2343 + leader = task->group_leader; 2344 + get_task_struct(leader); 2345 + } 2346 + rcu_read_unlock(); 2347 + put_task_struct(task); 2338 2348 if (!leader) 2339 2349 goto out_no_task; 2340 2350 retval = 0;
+6
include/asm-frv/Kbuild
··· 1 1 include include/asm-generic/Kbuild.asm 2 + 3 + header-y += registers.h 4 + 5 + unifdef-y += termios.h 6 + unifdef-y += ptrace.h 7 + unifdef-y += page.h
+2 -2
include/asm-frv/page.h
··· 76 76 77 77 #endif /* __ASSEMBLY__ */ 78 78 79 - #endif /* __KERNEL__ */ 80 - 81 79 #ifdef CONFIG_CONTIGUOUS_PAGE_ALLOC 82 80 #define WANT_PAGE_VIRTUAL 1 83 81 #endif 84 82 85 83 #include <asm-generic/memory_model.h> 86 84 #include <asm-generic/page.h> 85 + 86 + #endif /* __KERNEL__ */ 87 87 88 88 #endif /* _ASM_PAGE_H */
+4
include/asm-frv/ptrace.h
··· 12 12 #define _ASM_PTRACE_H 13 13 14 14 #include <asm/registers.h> 15 + #ifdef __KERNEL__ 15 16 #include <asm/irq_regs.h> 16 17 17 18 #define in_syscall(regs) (((regs)->tbr & TBR_TT) == TBR_TT_TRAP0) 19 + #endif 18 20 19 21 20 22 #define PT_PSR 0 ··· 62 60 #define PTRACE_GETFDPIC_EXEC 0 /* [addr] request the executable loadmap */ 63 61 #define PTRACE_GETFDPIC_INTERP 1 /* [addr] request the interpreter loadmap */ 64 62 63 + #ifdef __KERNEL__ 65 64 #ifndef __ASSEMBLY__ 66 65 67 66 /* ··· 77 74 extern unsigned long user_stack(const struct pt_regs *); 78 75 extern void show_regs(struct pt_regs *); 79 76 #define profile_pc(regs) ((regs)->pc) 77 + #endif 80 78 81 79 #endif /* !__ASSEMBLY__ */ 82 80 #endif /* _ASM_PTRACE_H */
+2
include/asm-frv/termios.h
··· 69 69 #define N_SYNC_PPP 14 70 70 #define N_HCI 15 /* Bluetooth HCI UART */ 71 71 72 + #ifdef __KERNEL__ 72 73 #include <asm-generic/termios.h> 74 + #endif 73 75 74 76 #endif /* _ASM_TERMIOS_H */
+9
include/asm-um/pgtable.h
··· 408 408 409 409 #include <asm-generic/pgtable-nopud.h> 410 410 411 + #ifdef CONFIG_HIGHMEM 412 + /* Clear a kernel PTE and flush it from the TLB */ 413 + #define kpte_clear_flush(ptep, vaddr) \ 414 + do { \ 415 + pte_clear(&init_mm, vaddr, ptep); \ 416 + __flush_tlb_one(vaddr); \ 417 + } while (0) 418 + #endif 419 + 411 420 #endif 412 421 #endif 413 422
+1 -1
include/linux/efi.h
··· 301 301 extern void efi_initialize_iomem_resources(struct resource *code_resource, 302 302 struct resource *data_resource); 303 303 extern unsigned long efi_get_time(void); 304 - extern int __init efi_set_rtc_mmss(unsigned long nowtime); 304 + extern int efi_set_rtc_mmss(unsigned long nowtime); 305 305 extern int is_available_memory(efi_memory_desc_t * md); 306 306 extern struct efi_memory_map memmap; 307 307
+1 -1
kernel/fork.c
··· 1313 1313 return regs; 1314 1314 } 1315 1315 1316 - struct task_struct * __devinit fork_idle(int cpu) 1316 + struct task_struct * __cpuinit fork_idle(int cpu) 1317 1317 { 1318 1318 struct task_struct *task; 1319 1319 struct pt_regs regs;
+1 -2
mm/page_alloc.c
··· 989 989 int classzone_idx, int alloc_flags) 990 990 { 991 991 /* free_pages my go negative - that's OK */ 992 - unsigned long min = mark; 993 - long free_pages = z->free_pages - (1 << order) + 1; 992 + long min = mark, free_pages = z->free_pages - (1 << order) + 1; 994 993 int o; 995 994 996 995 if (alloc_flags & ALLOC_HIGH)
+8 -2
net/ipv4/netfilter/ip_conntrack_sip.c
··· 283 283 { 284 284 int s = *shift; 285 285 286 - for (; dptr <= limit && *dptr != '@'; dptr++) 286 + /* Search for @, but stop at the end of the line. 287 + * We are inside a sip: URI, so we don't need to worry about 288 + * continuation lines. */ 289 + while (dptr <= limit && 290 + *dptr != '@' && *dptr != '\r' && *dptr != '\n') { 287 291 (*shift)++; 292 + dptr++; 293 + } 288 294 289 - if (*dptr == '@') { 295 + if (dptr <= limit && *dptr == '@') { 290 296 dptr++; 291 297 (*shift)++; 292 298 } else
+2 -2
net/ipv6/addrconf.c
··· 3393 3393 #ifdef CONFIG_IPV6_ROUTER_PREF 3394 3394 array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref; 3395 3395 array[DEVCONF_RTR_PROBE_INTERVAL] = cnf->rtr_probe_interval; 3396 - #ifdef CONFIV_IPV6_ROUTE_INFO 3396 + #ifdef CONFIG_IPV6_ROUTE_INFO 3397 3397 array[DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN] = cnf->accept_ra_rt_info_max_plen; 3398 3398 #endif 3399 3399 #endif ··· 3898 3898 .proc_handler = &proc_dointvec_jiffies, 3899 3899 .strategy = &sysctl_jiffies, 3900 3900 }, 3901 - #ifdef CONFIV_IPV6_ROUTE_INFO 3901 + #ifdef CONFIG_IPV6_ROUTE_INFO 3902 3902 { 3903 3903 .ctl_name = NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN, 3904 3904 .procname = "accept_ra_rt_info_max_plen",
+7
net/ipv6/ndisc.c
··· 1413 1413 return; 1414 1414 } 1415 1415 1416 + if (!ipv6_addr_equal(&skb->nh.ipv6h->daddr, target) && 1417 + !(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) { 1418 + ND_PRINTK2(KERN_WARNING 1419 + "ICMPv6 Redirect: target address is not link-local.\n"); 1420 + return; 1421 + } 1422 + 1416 1423 ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &skb->nh.ipv6h->saddr, 1417 1424 dev->ifindex); 1418 1425
+1 -1
net/netfilter/Kconfig
··· 628 628 629 629 config NETFILTER_XT_MATCH_HASHLIMIT 630 630 tristate '"hashlimit" match support' 631 - depends on NETFILTER_XTABLES 631 + depends on NETFILTER_XTABLES && (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n) 632 632 help 633 633 This option adds a `hashlimit' match. 634 634
+8 -2
net/netfilter/nf_conntrack_sip.c
··· 303 303 { 304 304 int s = *shift; 305 305 306 - for (; dptr <= limit && *dptr != '@'; dptr++) 306 + /* Search for @, but stop at the end of the line. 307 + * We are inside a sip: URI, so we don't need to worry about 308 + * continuation lines. */ 309 + while (dptr <= limit && 310 + *dptr != '@' && *dptr != '\r' && *dptr != '\n') { 307 311 (*shift)++; 312 + dptr++; 313 + } 308 314 309 - if (*dptr == '@') { 315 + if (dptr <= limit && *dptr == '@') { 310 316 dptr++; 311 317 (*shift)++; 312 318 } else
+12 -17
net/netfilter/xt_connbytes.c
··· 52 52 { 53 53 const struct xt_connbytes_info *sinfo = matchinfo; 54 54 u_int64_t what = 0; /* initialize to make gcc happy */ 55 + u_int64_t bytes = 0; 56 + u_int64_t pkts = 0; 55 57 const struct ip_conntrack_counter *counters; 56 58 57 59 if (!(counters = nf_ct_get_counters(skb))) ··· 91 89 case XT_CONNBYTES_AVGPKT: 92 90 switch (sinfo->direction) { 93 91 case XT_CONNBYTES_DIR_ORIGINAL: 94 - what = div64_64(counters[IP_CT_DIR_ORIGINAL].bytes, 95 - counters[IP_CT_DIR_ORIGINAL].packets); 92 + bytes = counters[IP_CT_DIR_ORIGINAL].bytes; 93 + pkts = counters[IP_CT_DIR_ORIGINAL].packets; 96 94 break; 97 95 case XT_CONNBYTES_DIR_REPLY: 98 - what = div64_64(counters[IP_CT_DIR_REPLY].bytes, 99 - counters[IP_CT_DIR_REPLY].packets); 96 + bytes = counters[IP_CT_DIR_REPLY].bytes; 97 + pkts = counters[IP_CT_DIR_REPLY].packets; 100 98 break; 101 99 case XT_CONNBYTES_DIR_BOTH: 102 - { 103 - u_int64_t bytes; 104 - u_int64_t pkts; 105 - bytes = counters[IP_CT_DIR_ORIGINAL].bytes + 106 - counters[IP_CT_DIR_REPLY].bytes; 107 - pkts = counters[IP_CT_DIR_ORIGINAL].packets+ 108 - counters[IP_CT_DIR_REPLY].packets; 109 - 110 - /* FIXME_THEORETICAL: what to do if sum 111 - * overflows ? */ 112 - 113 - what = div64_64(bytes, pkts); 114 - } 100 + bytes = counters[IP_CT_DIR_ORIGINAL].bytes + 101 + counters[IP_CT_DIR_REPLY].bytes; 102 + pkts = counters[IP_CT_DIR_ORIGINAL].packets + 103 + counters[IP_CT_DIR_REPLY].packets; 115 104 break; 116 105 } 106 + if (pkts != 0) 107 + what = div64_64(bytes, pkts); 117 108 break; 118 109 } 119 110
+6
net/sctp/sm_sideeffect.c
··· 621 621 /* The receiver of the HEARTBEAT ACK should also perform an 622 622 * RTT measurement for that destination transport address 623 623 * using the time value carried in the HEARTBEAT ACK chunk. 624 + * If the transport's rto_pending variable has been cleared, 625 + * it was most likely due to a retransmit. However, we want 626 + * to re-enable it to properly update the rto. 624 627 */ 628 + if (t->rto_pending == 0) 629 + t->rto_pending = 1; 630 + 625 631 hbinfo = (sctp_sender_hb_info_t *) chunk->skb->data; 626 632 sctp_transport_update_rto(t, (jiffies - hbinfo->sent_at)); 627 633