diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/kernel/irq.c | 6 | ||||
-rw-r--r-- | arch/i386/kernel/sysenter.c | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/powermac/backlight.c | 14 | ||||
-rw-r--r-- | arch/x86_64/kernel/irq.c | 6 | ||||
-rw-r--r-- | arch/x86_64/kernel/nmi.c | 2 |
5 files changed, 30 insertions, 8 deletions
diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c index c703bc7b088..9eec9435318 100644 --- a/arch/i386/kernel/irq.c +++ b/arch/i386/kernel/irq.c | |||
@@ -60,6 +60,12 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs) | |||
60 | u32 *isp; | 60 | u32 *isp; |
61 | #endif | 61 | #endif |
62 | 62 | ||
63 | if (unlikely((unsigned)irq >= NR_IRQS)) { | ||
64 | printk(KERN_EMERG "%s: cannot handle IRQ %d\n", | ||
65 | __FUNCTION__, irq); | ||
66 | BUG(); | ||
67 | } | ||
68 | |||
63 | irq_enter(); | 69 | irq_enter(); |
64 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 70 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
65 | /* Debugging check for stack overflow: is there less than 1KB free? */ | 71 | /* Debugging check for stack overflow: is there less than 1KB free? */ |
diff --git a/arch/i386/kernel/sysenter.c b/arch/i386/kernel/sysenter.c index c60419dee01..713ba39d32c 100644 --- a/arch/i386/kernel/sysenter.c +++ b/arch/i386/kernel/sysenter.c | |||
@@ -148,8 +148,10 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack) | |||
148 | vma->vm_mm = mm; | 148 | vma->vm_mm = mm; |
149 | 149 | ||
150 | ret = insert_vm_struct(mm, vma); | 150 | ret = insert_vm_struct(mm, vma); |
151 | if (ret) | 151 | if (unlikely(ret)) { |
152 | goto free_vma; | 152 | kmem_cache_free(vm_area_cachep, vma); |
153 | goto up_fail; | ||
154 | } | ||
153 | 155 | ||
154 | current->mm->context.vdso = (void *)addr; | 156 | current->mm->context.vdso = (void *)addr; |
155 | current_thread_info()->sysenter_return = | 157 | current_thread_info()->sysenter_return = |
@@ -158,10 +160,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack) | |||
158 | up_fail: | 160 | up_fail: |
159 | up_write(&mm->mmap_sem); | 161 | up_write(&mm->mmap_sem); |
160 | return ret; | 162 | return ret; |
161 | |||
162 | free_vma: | ||
163 | kmem_cache_free(vm_area_cachep, vma); | ||
164 | return ret; | ||
165 | } | 163 | } |
166 | 164 | ||
167 | const char *arch_vma_name(struct vm_area_struct *vma) | 165 | const char *arch_vma_name(struct vm_area_struct *vma) |
diff --git a/arch/powerpc/platforms/powermac/backlight.c b/arch/powerpc/platforms/powermac/backlight.c index 498b042e183..c7a27eddca6 100644 --- a/arch/powerpc/platforms/powermac/backlight.c +++ b/arch/powerpc/platforms/powermac/backlight.c | |||
@@ -119,7 +119,14 @@ int pmac_backlight_set_legacy_brightness(int brightness) | |||
119 | down(&pmac_backlight->sem); | 119 | down(&pmac_backlight->sem); |
120 | props = pmac_backlight->props; | 120 | props = pmac_backlight->props; |
121 | props->brightness = brightness * | 121 | props->brightness = brightness * |
122 | props->max_brightness / OLD_BACKLIGHT_MAX; | 122 | (props->max_brightness + 1) / |
123 | (OLD_BACKLIGHT_MAX + 1); | ||
124 | |||
125 | if (props->brightness > props->max_brightness) | ||
126 | props->brightness = props->max_brightness; | ||
127 | else if (props->brightness < 0) | ||
128 | props->brightness = 0; | ||
129 | |||
123 | props->update_status(pmac_backlight); | 130 | props->update_status(pmac_backlight); |
124 | up(&pmac_backlight->sem); | 131 | up(&pmac_backlight->sem); |
125 | 132 | ||
@@ -140,8 +147,11 @@ int pmac_backlight_get_legacy_brightness() | |||
140 | 147 | ||
141 | down(&pmac_backlight->sem); | 148 | down(&pmac_backlight->sem); |
142 | props = pmac_backlight->props; | 149 | props = pmac_backlight->props; |
150 | |||
143 | result = props->brightness * | 151 | result = props->brightness * |
144 | OLD_BACKLIGHT_MAX / props->max_brightness; | 152 | (OLD_BACKLIGHT_MAX + 1) / |
153 | (props->max_brightness + 1); | ||
154 | |||
145 | up(&pmac_backlight->sem); | 155 | up(&pmac_backlight->sem); |
146 | } | 156 | } |
147 | mutex_unlock(&pmac_backlight_mutex); | 157 | mutex_unlock(&pmac_backlight_mutex); |
diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c index 3be0a7e4bf0..bfa82f52a5c 100644 --- a/arch/x86_64/kernel/irq.c +++ b/arch/x86_64/kernel/irq.c | |||
@@ -118,6 +118,12 @@ asmlinkage unsigned int do_IRQ(struct pt_regs *regs) | |||
118 | /* high bit used in ret_from_ code */ | 118 | /* high bit used in ret_from_ code */ |
119 | unsigned irq = ~regs->orig_rax; | 119 | unsigned irq = ~regs->orig_rax; |
120 | 120 | ||
121 | if (unlikely(irq >= NR_IRQS)) { | ||
122 | printk(KERN_EMERG "%s: cannot handle IRQ %d\n", | ||
123 | __FUNCTION__, irq); | ||
124 | BUG(); | ||
125 | } | ||
126 | |||
121 | exit_idle(); | 127 | exit_idle(); |
122 | irq_enter(); | 128 | irq_enter(); |
123 | #ifdef CONFIG_DEBUG_STACKOVERFLOW | 129 | #ifdef CONFIG_DEBUG_STACKOVERFLOW |
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c index 399489c9313..0ef9cf2bc45 100644 --- a/arch/x86_64/kernel/nmi.c +++ b/arch/x86_64/kernel/nmi.c | |||
@@ -607,11 +607,13 @@ void set_nmi_callback(nmi_callback_t callback) | |||
607 | vmalloc_sync_all(); | 607 | vmalloc_sync_all(); |
608 | rcu_assign_pointer(nmi_callback, callback); | 608 | rcu_assign_pointer(nmi_callback, callback); |
609 | } | 609 | } |
610 | EXPORT_SYMBOL_GPL(set_nmi_callback); | ||
610 | 611 | ||
611 | void unset_nmi_callback(void) | 612 | void unset_nmi_callback(void) |
612 | { | 613 | { |
613 | nmi_callback = dummy_nmi_callback; | 614 | nmi_callback = dummy_nmi_callback; |
614 | } | 615 | } |
616 | EXPORT_SYMBOL_GPL(unset_nmi_callback); | ||
615 | 617 | ||
616 | #ifdef CONFIG_SYSCTL | 618 | #ifdef CONFIG_SYSCTL |
617 | 619 | ||