Andrew G. Morgan ca05a99a54 capabilities: remain source compatible with 32-bit raw legacy capability support.
Source code out there hard-codes a notion of what the
_LINUX_CAPABILITY_VERSION #define means in terms of the semantics of the
raw capability system calls capget() and capset().  Its unfortunate, but
true.

Since the confusing header file has been in a released kernel, there is
software that is erroneously using 64-bit capabilities with the semantics
of 32-bit compatibilities.  These recently compiled programs may suffer
corruption of their memory when sys_getcap() overwrites more memory than
they are coded to expect, and the raising of added capabilities when using
sys_capset().

As such, this patch does a number of things to clean up the situation
for all. It

  1. forces the _LINUX_CAPABILITY_VERSION define to always retain its
     legacy value.

  2. adopts a new #define strategy for the kernel's internal
     implementation of the preferred magic.

  3. deprecates v2 capability magic in favor of a new (v3) magic
     number. The functionality of v3 is entirely equivalent to v2,
     the only difference being that the v2 magic causes the kernel
     to log a "deprecated" warning so the admin can find applications
     that may be using v2 inappropriately.

[User space code continues to be encouraged to use the libcap API which
protects the application from details like this.  libcap-2.10 is the first
to support v3 capabilities.]

Fixes issue reported in https://bugzilla.redhat.com/show_bug.cgi?id=447518.
Thanks to Bojan Smojver for the report.

[akpm@linux-foundation.org: s/depreciate/deprecate/g]
[akpm@linux-foundation.org: be robust about put_user size]
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Andrew G. Morgan <morgan@kernel.org>
Cc: Serge E. Hallyn <serue@us.ibm.com>
Cc: Bojan Smojver <bojan@rexursive.com>
Cc: stable@kernel.org
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
2008-05-31 16:36:16 -07:00
..
2008-05-14 19:23:27 -05:00
2008-02-08 09:22:40 -08:00
2008-05-01 08:04:01 -07:00
2008-05-22 14:20:21 +00:00
2008-04-29 08:06:04 -07:00
2008-05-19 15:37:27 -05:00
2008-04-29 08:06:00 -07:00
2008-05-24 09:56:07 -07:00
2008-04-30 08:29:52 -07:00
2008-02-08 09:22:40 -08:00
2008-05-21 16:55:58 -07:00
2008-04-29 08:06:18 -07:00
2007-10-18 14:37:31 -07:00
2008-05-24 09:56:08 -07:00
2008-05-21 16:55:59 -07:00
2008-04-30 08:29:51 -07:00
2008-04-30 08:29:52 -07:00
2008-04-29 08:06:17 -07:00
2008-05-07 18:35:03 +02:00
2008-01-30 13:31:46 +01:00
2008-04-30 08:29:47 -07:00
2008-05-01 13:08:16 -04:00
2008-05-01 13:08:50 -04:00
2008-05-01 13:08:16 -04:00
2008-05-01 13:08:16 -04:00
2008-05-06 13:13:37 -07:00
2008-02-06 10:41:07 -08:00
2008-04-29 08:06:00 -07:00
2008-04-30 13:38:47 +02:00
2008-04-29 08:06:01 -07:00
2008-01-30 13:31:46 +01:00
2008-02-14 21:13:33 -08:00
2008-05-01 13:08:16 -04:00
2008-05-08 10:46:56 -07:00
2008-04-30 08:29:51 -07:00
2008-05-01 13:08:16 -04:00
2008-05-01 13:08:50 -04:00
2008-05-08 14:06:19 +02:00
2008-02-14 21:13:33 -08:00
2008-04-29 08:06:00 -07:00
2008-05-01 13:08:50 -04:00