Commit 248e7033 authored by liubo's avatar liubo
Browse files

etmem: fix the div 0 problem in swapcache reclaim process

euleros inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7JI6K


CVE: NA

------------------------------------------------------------

In the swapcache recycling process, the number of pages
to be reclaimed on each node is obtained as follows:

nr_to_reclaim[nid_num] = (swapcache_to_reclaim /
			  (swapcache_total_reclaimable / nr[nid_num]));

However, nr[nid_num] is obtained by traversing the number
of swapcache pages on each node.
If there are multiple nodes in the environment and
no swap process occurs on a node, no swapcache page exists.
The value of nr[nid_num] may be 0.

Therefore, division by zero errors may occur.

Signed-off-by: default avatarliubo <liubo254@huawei.com>
parent cb31b5b2
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -4819,9 +4819,12 @@ int do_swapcache_reclaim(unsigned long *swapcache_watermark,
		for_each_node_state(nid, N_MEMORY) {
			cond_resched();

			nr_to_reclaim[nid_num] = (swapcache_to_reclaim / (swapcache_total_reclaimable / nr[nid_num]));
			nr_to_reclaim[nid_num] = (swapcache_total_reclaimable == 0) ? 0 :
						 ((swapcache_to_reclaim * nr[nid_num]) /
						   swapcache_total_reclaimable);
			reclaim_page_count += reclaim_swapcache_pages_from_list(nid,
						&swapcache_list[nid_num], nr_to_reclaim[nid_num], false);
						&swapcache_list[nid_num],
						nr_to_reclaim[nid_num], false);
			nid_num++;
		}