Quoting Andrew Morgan ([EMAIL PROTECTED]):
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Andrew,
>
> The attached patch (171282b3553fcec43b9ab615eb7daf6c2b494a87) applies
> against 2.6.24-rc2-mm1. It addresses the problem reported by Kevin and
> Andy - ultimately, the legacy support wasn't transparent. In particular,
> userspace 32-bit capability manipulations (when run by root) that used
> to work, without this patch, fail.
>
> Cheers
>
> Andrew
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.6 (GNU/Linux)
>
> iD8DBQFHP8zBQheEq9QabfIRAs6/AJ9Tbn9vk/pgpu0FwOzU/EJg9oirjACaAndU
> unbe82Ep+s/y0Nl3aKP92uY=
> =8pOC
> -----END PGP SIGNATURE-----
> >From 171282b3553fcec43b9ab615eb7daf6c2b494a87 Mon Sep 17 00:00:00 2001
> From: Andrew G. Morgan <[EMAIL PROTECTED]>
> Date: Sat, 17 Nov 2007 21:03:19 -0800
> Subject: [PATCH] Legacy support fix; retain transparent support for 32-bit
> capability apps.
>
> Legacy support requires that we don't return an error for previously
> legitimate calls. Removing this check, we make a fail-safe best effort
> to support legacy applications.
Yeah, I struggled with this too.
This behavior makes particular sense if we think (as I do) that new
capabilities will mainly be introduced along with new features. So
legacy applications shouldn't misbehave due to ignorance or absence
(after capget+capset) of them.
> Signed-off-by: Andrew G. Morgan <[EMAIL PROTECTED]>
Acked-by: Serge Hallyn <[EMAIL PROTECTED]>
thanks,
-serge
> ---
> kernel/capability.c | 27 ++++++++++++++++++++-------
> 1 files changed, 20 insertions(+), 7 deletions(-)
>
> diff --git a/kernel/capability.c b/kernel/capability.c
> index 8cba9b2..9f2db55 100644
> --- a/kernel/capability.c
> +++ b/kernel/capability.c
> @@ -109,13 +109,26 @@ out:
> kdata[i].permitted = pP.cap[i];
> kdata[i].inheritable = pI.cap[i];
> }
> - while (i < _LINUX_CAPABILITY_U32S) {
> - if (pE.cap[i] || pP.cap[i] || pP.cap[i]) {
> - /* Cannot represent w/ legacy structure */
> - return -ERANGE;
> - }
> - i++;
> - }
> +
> + /*
> + * Note, in the case, tocopy < _LINUX_CAPABILITY_U32S,
> + * we silently drop the upper capabilities here. This
> + * has the effect of making older libcap
> + * implementations implicitly drop upper capability
> + * bits when they perform a: capget/modify/capset
> + * sequence.
> + *
> + * This behavior is considered fail-safe
> + * behavior. Upgrading the application to a newer
> + * version of libcap will enable access to the newer
> + * capabilities.
> + *
> + * An alternative would be to return an error here
> + * (-ERANGE), but that causes legacy applications to
> + * unexpectidly fail; the capget/modify/capset aborts
> + * before modification is attempted and the application
> + * fails.
> + */
>
> if (copy_to_user(dataptr, kdata, tocopy
> * sizeof(struct __user_cap_data_struct))) {
> --
> 1.5.1.3
>
-
To unsubscribe from this list: send the line "unsubscribe
linux-security-module" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html