From 3349ade9c1f40c0999c722dda4cd84b9869bebe2 Mon Sep 17 00:00:00 2001 From: lixiaokeng 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: volcanodragon --- 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