Dear Coders,

Here is a fun puzzle to kick off the new year...


Background:

when libexplain goes to print string arguments, it takes care to avoid
segfaults.

Strings are relatively easy to check for valid-ness, and libexplain uses

    lstat(s, &st) < 0 && errno == EFAULT

to test if a string pointer is valid.  Obviously, if (the string is not
a path && the string is longer than PATH_MAX) it's not useful, but that
usually does not happen.  This is certainly easier than trapping
SIGSEGV, doing a strlen, and then restoring SIGSEGV.


The Puzzle:

Is there a simple way (preferably a single system call) to discover if a
user space memory range (rather than a C string) is all valid?  E.g.
write(fildes, data, data_size) trying to discover whether or not
(data,data_size) describes a piece of user memory none of which will
segfault when accessed?

Portable posix tests are better than linux-specific tests.

Using a file descriptor may not be possible (library client could have
run out), so read(2) is tempting but no banana.


-- 
Regards
Peter Miller <pmil...@opensource.org.au>
/\/\*        http://www.canb.auug.org.au/~millerp/

PGP public key ID: 1024D/D0EDB64D
fingerprint = AD0A C5DF C426 4F03 5D53  2BDB 18D8 A4E2 D0ED B64D
See http://www.keyserver.net or any PGP keyserver for public key.
_______________________________________________
coders mailing list
coders@slug.org.au
http://lists.slug.org.au/listinfo/coders

Reply via email to