Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
These changes are a raw update to a vanilla kernel 4.1.10, with the
[kvmfornfv.git]
/
kernel
/
arch
/
x86
/
kernel
/
cpu
/
perf_event.c
diff --git
a/kernel/arch/x86/kernel/cpu/perf_event.c
b/kernel/arch/x86/kernel/cpu/perf_event.c
index
aa4e3a7
..
4cc98a4
100644
(file)
--- a/
kernel/arch/x86/kernel/cpu/perf_event.c
+++ b/
kernel/arch/x86/kernel/cpu/perf_event.c
@@
-2170,21
+2170,25
@@
static unsigned long get_segment_base(unsigned int segment)
int idx = segment >> 3;
if ((segment & SEGMENT_TI_MASK) == SEGMENT_LDT) {
int idx = segment >> 3;
if ((segment & SEGMENT_TI_MASK) == SEGMENT_LDT) {
+ struct ldt_struct *ldt;
+
if (idx > LDT_ENTRIES)
return 0;
if (idx > LDT_ENTRIES)
return 0;
- if (idx > current->active_mm->context.size)
+ /* IRQs are off, so this synchronizes with smp_store_release */
+ ldt = lockless_dereference(current->active_mm->context.ldt);
+ if (!ldt || idx > ldt->size)
return 0;
return 0;
- desc =
current->active_mm->context.ldt
;
+ desc =
&ldt->entries[idx]
;
} else {
if (idx > GDT_ENTRIES)
return 0;
} else {
if (idx > GDT_ENTRIES)
return 0;
- desc = raw_cpu_ptr(gdt_page.gdt);
+ desc = raw_cpu_ptr(gdt_page.gdt)
+ idx
;
}
}
- return get_desc_base(desc
+ idx
);
+ return get_desc_base(desc);
}
#ifdef CONFIG_COMPAT
}
#ifdef CONFIG_COMPAT