hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8WVL2
CVE: NA
--------------------------------
When memcg oom occurs, commit be8d95530886 ("memcg: support priority
for oom") calls memcg_print_bad_task() to print oc->chosen when
the chosen task comes from low-priority memcg. oc->chosen may be
assigned with -1 in oom_evaluate_task(). Howerver, memcg_print_bad_task()
does't check if oc->chosen is -1 and leads to NULL pointer dereference.
To fix it, check if oc->chosen is -1 in memcg_print_bad_task().
Fixes: be8d95530886 ("memcg: support priority for oom")
Signed-off-by: Jinjiang Tu <tujinjiang(a)huawei.com>
---
mm/memcontrol.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 7ab0eec942ba..8327cef9d53a 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4219,7 +4219,7 @@ void memcg_print_bad_task(struct oom_control *oc)
if (memcg_oom_prio_disabled())
return;
- if (oc->chosen) {
+ if (oc->chosen && oc->chosen != (void *)-1UL) {
struct mem_cgroup *memcg;
rcu_read_lock();
--
2.25.1
A crash kernel boot failure issue is reported in openeuler 5.10 series kernel(in
x86 virtual machine with Hi1822 virtual nic). Finally the issue was narrowed
down to irq vector conflict.
Backport following patchset from kernel maillist to fix this issue.
https://lore.kernel.org/linux-pci/20181018183721.27467-3-gpiccoli@canonical…
Guilherme G. Piccoli (3):
x86/quirks: Scan all busses for early PCI quirks
x86/PCI: Export find_cap() to be used in early PCI code
x86/quirks: Add parameter to clear MSIs early on boot
.../admin-guide/kernel-parameters.txt | 6 +++
arch/x86/include/asm/pci-direct.h | 2 +
arch/x86/kernel/aperture_64.c | 30 +------------
arch/x86/kernel/early-quirks.c | 45 ++++++++++++++++---
arch/x86/pci/common.c | 4 ++
arch/x86/pci/early.c | 25 +++++++++++
6 files changed, 77 insertions(+), 35 deletions(-)
--
2.20.1
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8WVL2
CVE: NA
--------------------------------
In OLK-5.10, when oc->chosen is assigned with -1 in oom_evaluate_task(),
mem_cgroup_scan_tasks() will return -1, and only calls
memcg_print_bad_task() when the return value is 0.
commit 025b7799b35d ("mm/memcg: remove return value of
mem_cgroup_scan_tasks()") removes return value of mem_cgroup_scan_tasks().
When adapting memcg oom priority feature to OLK-6.6, memcg_print_bad_task()
will be called in all cases, and forgets to check if oc->chosen is -1,
leading to NULL pointer dereference.
Fixes: be8d95530886 ("memcg: support priority for oom")
Signed-off-by: Jinjiang Tu <tujinjiang(a)huawei.com>
---
mm/memcontrol.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 7ab0eec942ba..8327cef9d53a 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4219,7 +4219,7 @@ void memcg_print_bad_task(struct oom_control *oc)
if (memcg_oom_prio_disabled())
return;
- if (oc->chosen) {
+ if (oc->chosen && oc->chosen != (void *)-1UL) {
struct mem_cgroup *memcg;
rcu_read_lock();
--
2.25.1
hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8WVL2
CVE: NA
--------------------------------
In OLK-5.10, when oc->chosen is assigned with -1 in oom_evaluate_task(),
mem_cgroup_scan_tasks() will return -1, and only calls
memcg_print_bad_task() when the return value is 0.
commit 025b7799b35d ("mm/memcg: remove return value of
mem_cgroup_scan_tasks()") removes return value of mem_cgroup_scan_tasks().
When adapting memcg oom priority feature to OLK-6.6, memcg_print_bad_task()
will be called in all cases, and forgets to check if oc->chosen is -1,
leading to NULL pointer dereference.
Fixes: be8d95530886 ("memcg: support priority for oom")
Signed-off-by: Jinjiang Tu <tujinjiang(a)huawei.com>
---
mm/memcontrol.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 7ab0eec942ba..8327cef9d53a 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4219,7 +4219,7 @@ void memcg_print_bad_task(struct oom_control *oc)
if (memcg_oom_prio_disabled())
return;
- if (oc->chosen) {
+ if (oc->chosen && oc->chosen != (void *)-1UL) {
struct mem_cgroup *memcg;
rcu_read_lock();
--
2.25.1