[syslinux] [PATCH 2/2] core: Fix stack overflow when reloading config

Ady ady-sf at hotmail.com
Mon Jan 25 14:21:51 PST 2016


> >I see 3 ways of handling this.
> >1) Have some specific code in ldlinux.c32 that handles
> >reinitialization.
> >2) Have some specific cache for the COM32 modules and load them only
> >once for the lifetime of the whole boot loader.
> >3) Put a file system cache that would also benefit to other files.
> >
> >I would tend to prefer the third way, but I don't know how much work
> >it would be or if it would integrate well in the current design.
> >
> >
> >Celelibi
> 
> #2 is really easy; we just need to keep a copy of the unmodified
> data section.  The only risk with this approach is running out of
> memory, but I think that risk is minor. -- 
 
 
Please forgive my lack of technical knowledge about the code itself.

Regarding "...running out of memory... the risk is minor."

This "wishful thinking" reminds me of a different case we had; 
although, code-wise, it was not a similar problem (I would assume).

A patch from Shao, "fs: Fix searchdir resource leak", committed 
2012Nov,

_ for 5.xx commit 57acc34bdf83fc5ea08dbf44b74a5dd2c1131187

_ for 4.xx commit 37971728a5fc40b1c90512e79e47333d98ec8851

reads:
 *** 
This is a significant rewrite of the generic lookup logic inside 
core/fs/fs.c's searchdir function.  Previously, there was a memory leak 
if a path involved multiple directories.  After a sufficiently large 
number of invocations, this could be observed.
 *** 

The code, before that patch, used to assume that just "a few" files 
were involved. A c32 module that has to deal with many more files 
showed the leak, and the crash.

(BTW, I am still waiting - after more than 3 years - and hoping for 
that useful c32 module to be part of official Syslinux.)

Additionally, the amount of available resources (including memory, 
among others) in some cases is not _that_ high, and we frequently 
forget they exist. Cases such as the DOS-based installer comes to mind, 
and the length of the file names for library modules (e.g. 
"libutil_com.c32") is another one. It was _that_ easy to forget that 
FAT and ISO9660 do not support such file names (thus, a library module 
shall not use unsupported file names), and it is easy for anyone to 
assume that "his own" use-case is broad-enough that it covers anyone's 
/ everyone's else.

It is also not a coincidence that we already have seen leaks related to 
directives such as CONFIG and INCLUDE in the past.

I hope we are not introducing more problems while we are trying to 
solve one.

Regards,
Ady.



More information about the Syslinux mailing list