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

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6

* 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6:
[PATCH] x86-64: Use stricter in process stack check for unwinder
[PATCH] i386: Fix compilation with UP genericarch
[PATCH] x86-64: Fix warning in io_apic.c
[PATCH] x86-64: work around gcc4 issue with -Os in Dwarf2 stack unwind
[PATCH] x86_64: Align data segment to PAGE_SIZE boundary

+18 -7
-2
arch/x86_64/kernel/io_apic.c
··· 754 754 { 755 755 /* Initialize vector_irq on a new cpu */ 756 756 /* This function must be called with vector_lock held */ 757 - unsigned long flags; 758 757 int irq, vector; 759 - 760 758 761 759 /* Mark the inuse vectors */ 762 760 for (irq = 0; irq < NR_IRQ_VECTORS; ++irq) {
+9 -1
arch/x86_64/kernel/traps.c
··· 242 242 * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack 243 243 */ 244 244 245 + static inline int valid_stack_ptr(struct thread_info *tinfo, void *p) 246 + { 247 + void *t = (void *)tinfo; 248 + return p > t && p < t + THREAD_SIZE - 3; 249 + } 250 + 245 251 void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * stack, 246 252 struct stacktrace_ops *ops, void *data) 247 253 { 248 254 const unsigned cpu = smp_processor_id(); 249 255 unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr; 250 256 unsigned used = 0; 257 + struct thread_info *tinfo; 251 258 252 259 if (!tsk) 253 260 tsk = current; ··· 377 370 /* 378 371 * This handles the process stack: 379 372 */ 380 - HANDLE_STACK (((long) stack & (THREAD_SIZE-1)) != 0); 373 + tinfo = current_thread_info(); 374 + HANDLE_STACK (valid_stack_ptr(tinfo, stack)); 381 375 #undef HANDLE_STACK 382 376 } 383 377 EXPORT_SYMBOL(dump_trace);
+4
include/asm-i386/mach-summit/mach_apic.h
··· 88 88 89 89 static inline int apicid_to_node(int logical_apicid) 90 90 { 91 + #ifdef CONFIG_SMP 91 92 return apicid_2_node[hard_smp_processor_id()]; 93 + #else 94 + return 0; 95 + #endif 92 96 } 93 97 94 98 /* Mapping from cpu number to logical apicid */
+5 -4
kernel/unwind.c
··· 938 938 else { 939 939 retAddrReg = state.version <= 1 ? *ptr++ : get_uleb128(&ptr, end); 940 940 /* skip augmentation */ 941 - if (((const char *)(cie + 2))[1] == 'z') 942 - ptr += get_uleb128(&ptr, end); 941 + if (((const char *)(cie + 2))[1] == 'z') { 942 + uleb128_t augSize = get_uleb128(&ptr, end); 943 + 944 + ptr += augSize; 945 + } 943 946 if (ptr > end 944 947 || retAddrReg >= ARRAY_SIZE(reg_info) 945 948 || REG_INVALID(retAddrReg) ··· 966 963 if (cie == NULL || fde == NULL) { 967 964 #ifdef CONFIG_FRAME_POINTER 968 965 unsigned long top, bottom; 969 - #endif 970 966 971 - #ifdef CONFIG_FRAME_POINTER 972 967 top = STACK_TOP(frame->task); 973 968 bottom = STACK_BOTTOM(frame->task); 974 969 # if FRAME_RETADDR_OFFSET < 0