From ae9cafd919be2f5b1b44ca7afe66e1656e0acdb6 Mon Sep 17 00:00:00 2001 From: Conrad Meyer Date: Fri, 30 Oct 2020 19:02:59 +0000 Subject: [PATCH] linux(4): Quiesce warning about madvise(..., -1) This API misuse is intended to produce an error value to detect certain bogus stub implementations of MADV_WIPEONFORK. We don't need to log a warning about it. Example: https://boringssl.googlesource.com/boringssl/+/ad5582985cc6b89d0e7caf0d9cc7e301de61cf66%5E%21/ Reviewed by: emaste, trasz Differential Revision: https://reviews.freebsd.org/D27017 --- sys/compat/linux/linux_mmap.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sys/compat/linux/linux_mmap.c b/sys/compat/linux/linux_mmap.c index cc63c45579a..1b4b0b78280 100644 --- a/sys/compat/linux/linux_mmap.c +++ b/sys/compat/linux/linux_mmap.c @@ -394,6 +394,16 @@ linux_madvise_common(struct thread *td, uintptr_t addr, size_t len, int behav) case LINUX_MADV_SOFT_OFFLINE: linux_msg(curthread, "unsupported madvise MADV_SOFT_OFFLINE"); return (EINVAL); + case -1: + /* + * -1 is sometimes used as a dummy value to detect simplistic + * madvise(2) stub implementations. This safeguard is used by + * BoringSSL, for example, before assuming MADV_WIPEONFORK is + * safe to use. Don't produce an "unsupported" error message + * for this special dummy value, which is unlikely to be used + * by any new advisory behavior feature. + */ + return (EINVAL); default: linux_msg(curthread, "unsupported madvise behav %d", behav); return (EINVAL);