cachefilesd/0001-cachefilesd-fix-abort-in-decant_cull_table.patch
2021-11-29 22:20:56 +08:00

45 lines
1.2 KiB
Diff

From 3349ade9c1f40c0999c722dda4cd84b9869bebe2 Mon Sep 17 00:00:00 2001
From: lixiaokeng <lixiaokeng@huawei.com>
Date: Mon, 29 Nov 2021 21:15:56 +0800
Subject: [PATCH] cachefilesd: fix abort() in decant_cull_table
decant_cull_table only deals data with 32 bit, we should fix it
to support 64 bit, or it will coredump.
Signed-off-by: lixiaokeng <lixiaokeng@huawei.com>
Signed-off-by: volcanodragon <linfeilong@huawei.com>
---
cachefilesd.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/cachefilesd.c b/cachefilesd.c
index d4d236f..e9de4e4 100644
--- a/cachefilesd.c
+++ b/cachefilesd.c
@@ -1512,6 +1512,13 @@ static void decant_cull_table(void)
{
unsigned loop, avail, copy, leave, space, n;
+ long mask = 15;
+ long illegal = 6;
+
+ /* 8 is bit of byte, 4 is valid bit of mask and illegal */
+ mask = mask << (sizeof(void *) * 8 - 4);
+ illegal = illegal << (sizeof(void *) * 8 - 4);
+
if (scan_cursor)
error("Can't decant cull table whilst scanning");
@@ -1567,7 +1574,7 @@ static void decant_cull_table(void)
check:
for (loop = 0; loop < nr_in_ready_table; loop++)
- if (((long)cullready[loop] & 0xf0000000) == 0x60000000)
+ if (((long)cullready[loop] & mask) == illegal)
abort();
}
--
1.8.3.1