Due to a userspace breakage, commit 1251201c0d34 ("sched/core: Fix uclamp ABI bug, clean up and robustify sched_read_attr() ABI logic and code") changed the semantics of sched_getattr(2) when the userspace struct is smaller than the kernel struct. Now, any trailing non-zero data in the kernel structure is ignored when copying to userspace. We also document the original error code correctly (it was EFBIG not E2BIG) in the BUGS section. Ref: 1251201c0d34 ("sched/core: Fix uclamp ABI bug, clean up and robustify sched_read_attr() ABI logic and code") Signed-off-by: Aleksa Sarai <cyphar@xxxxxxxxxx> --- man2/sched_setattr.2 | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/man2/sched_setattr.2 b/man2/sched_setattr.2 index 2592a761a086..da0972a6a86d 100644 --- a/man2/sched_setattr.2 +++ b/man2/sched_setattr.2 @@ -286,10 +286,8 @@ structure, the additional bytes in the user-space structure are not touched. If the caller-provided structure is smaller than the kernel .I sched_attr -structure and the kernel needs to return values outside the provided space, -.BR sched_getattr () -fails with the error -.BR E2BIG . +structure, the kernel will silently not return any values which would be stored +outside the provided space. As with .BR sched_setattr (), these semantics allow for future extensibility of the interface. @@ -416,6 +414,16 @@ failed with the error instead of .BR E2BIG for the case described in ERRORS. +.PP +In Linux versions up to 5.3, +.BR sched_getattr () +failed with the error +.BR EFBIG +if the in-kernel +.IR sched_attr +structure was larger than the +.IR size +passed by user space. .\" In Linux versions up to up 3.15, .\" FIXME . patch from Peter Zijlstra pending .\" .BR sched_setattr () -- 2.28.0