2014-08-11 15:53:17 +02:00
|
|
|
commit 0a0e0e41cad93cd16c323cf16f40264a21eedd6c
|
|
|
|
Author: H. Peter Anvin <hpa@zytor.com>
|
|
|
|
Date: Thu Jul 19 07:29:55 2012 -0700
|
|
|
|
|
|
|
|
Correct initialization of the cache doubly-linked list
|
|
|
|
|
|
|
|
The initialization of the cache doubly-linked list had
|
|
|
|
head->next->prev instead of head->prev->next; this entry is supposed
|
|
|
|
to initialize the ->next entry of the last entry in the list (which
|
|
|
|
points back to the head node.)
|
|
|
|
|
|
|
|
For clarity, consistently use "head" to refer to the head node; the
|
|
|
|
mixing of "head" and "dev->cache_head" needlessly obfuscated the code.
|
|
|
|
|
|
|
|
The wild pointer reference caused crashes on some systems.
|
|
|
|
|
|
|
|
Reported-by: Jan Safrata <jsafrata@centrum.cz>
|
|
|
|
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
|
|
|
|
|
2024-06-21 14:26:32 +02:00
|
|
|
Index: syslinux-4.04/core/fs/cache.c
|
|
|
|
===================================================================
|
|
|
|
--- syslinux-4.04.orig/core/fs/cache.c
|
|
|
|
+++ syslinux-4.04/core/fs/cache.c
|
|
|
|
@@ -37,10 +37,10 @@ void cache_init(struct device *dev, int
|
2014-08-11 15:53:17 +02:00
|
|
|
|
|
|
|
dev->cache_head = head = (struct cache *)
|
|
|
|
(data + (dev->cache_entries << block_size_shift));
|
|
|
|
- cache = dev->cache_head + 1; /* First cache descriptor */
|
|
|
|
+ cache = head + 1; /* First cache descriptor */
|
|
|
|
|
|
|
|
head->prev = &cache[dev->cache_entries-1];
|
|
|
|
- head->next->prev = dev->cache_head;
|
|
|
|
+ head->prev->next = head;
|
|
|
|
head->block = -1;
|
|
|
|
head->data = NULL;
|
|
|
|
|