[apparmor] [PATCH 6/6] Fix the return size of aa_getprocattr
Steve Beattie
steve at nxnw.org
Wed Mar 21 22:24:08 UTC 2012
On Wed, Mar 21, 2012 at 06:02:25AM -0700, John Johansen wrote:
> aa_getprocattr is returning the size of the buffer not the size of the
> data read that it is supposed to return. Also update the man page to
> reflect the return value as documented in the functions, and update
> the test cases to check the return value.
>
> Signed-off-by: John Johansen <john.johansen at canonical.com>
Acked-By: Steve Beattie <sbeattie at ubuntu.com>
> ---
> libraries/libapparmor/doc/aa_getcon.pod | 3 +-
> libraries/libapparmor/src/kernel_interface.c | 3 +-
> tests/regression/apparmor/introspect.c | 33 ++++++++++++++++++++-----
> 3 files changed, 29 insertions(+), 10 deletions(-)
>
> diff --git a/libraries/libapparmor/doc/aa_getcon.pod b/libraries/libapparmor/doc/aa_getcon.pod
> index 2c72264..f279128 100644
> --- a/libraries/libapparmor/doc/aa_getcon.pod
> +++ b/libraries/libapparmor/doc/aa_getcon.pod
> @@ -69,7 +69,8 @@ does not handle buffer allocation.
>
> =head1 RETURN VALUE
>
> -On success zero is returned. On error, -1 is returned, and
> +On success size of data placed in the buffer is returned, this includes the
> +mode if present and any terminating characters. On error, -1 is returned, and
> errno(3) is set appropriately.
>
> =head1 ERRORS
> diff --git a/libraries/libapparmor/src/kernel_interface.c b/libraries/libapparmor/src/kernel_interface.c
> index 7d6edc4..8252b88 100644
> --- a/libraries/libapparmor/src/kernel_interface.c
> +++ b/libraries/libapparmor/src/kernel_interface.c
> @@ -280,11 +280,10 @@ int aa_getprocattr(pid_t tid, const char *attr, char **buf, char **mode)
> free(buffer);
> *buf = NULL;
> *mode = NULL;
> - size = -1;
> } else
> *buf = buffer;
>
> - return size;
> + return rc;
> }
>
> static int setprocattr(pid_t tid, const char *attr, const char *buf, int len)
> diff --git a/tests/regression/apparmor/introspect.c b/tests/regression/apparmor/introspect.c
> index bbdf908..367ea37 100644
> --- a/tests/regression/apparmor/introspect.c
> +++ b/tests/regression/apparmor/introspect.c
> @@ -31,7 +31,8 @@ int main(int argc, char *argv[])
> }
>
> if (strcmp(argv[1], "self") == 0){
> - if (aa_getcon(&profile, &mode) == -1) {
> + rc = aa_getcon(&profile, &mode);
> + if (rc == -1) {
> int serrno = errno;
> fprintf(stderr,
> "FAIL: introspect_confinement %s failed - %s\n",
> @@ -47,12 +48,15 @@ int main(int argc, char *argv[])
> "FAIL: query_confinement - invalid pid: %s\n",
> argv[1]);
> exit(serrno);
> - } else if (aa_gettaskcon(pid, &profile, &mode) == -1) {
> - int serrno = errno;
> - fprintf(stderr,
> - "FAIL: query_confinement %s failed - %s\n",
> - argv[1], strerror(errno));
> - exit(serrno);
> + } else {
> + rc = aa_gettaskcon(pid, &profile, &mode);
> + if (rc == -1) {
> + int serrno = errno;
> + fprintf(stderr,
> + "FAIL: query_confinement %s failed - %s\n",
> + argv[1], strerror(errno));
> + exit(serrno);
> + }
> }
> }
> if (strcmp(profile, argv[2]) != 0) {
> @@ -61,6 +65,21 @@ int main(int argc, char *argv[])
> profile);
> exit(1);
> }
> + if (mode) {
> + if (rc != strlen(profile) + strlen(mode) + 4) {
> + /* rc includes mode. + 2 null term + 1 ( + 1 space */
> + fprintf(stderr,
> + "FAIL: expected return len %d != actual %d\n",
> + strlen(profile) + strlen(mode) + 4, rc);
> + exit(1);
> + }
> + } else if (rc != strlen(profile) + 1) {
> + /* rc includes null termination */
> + fprintf(stderr,
> + "FAIL: expected return len %d != actual %d\n",
> + strlen(profile) + 1, rc);
> + exit(1);
> + }
> if (argv[3] && (!mode || strcmp(mode, argv[3]) != 0)) {
> fprintf(stderr,
> "FAIL: expected mode \"%s\" != \"%s\"\n", argv[3],
> --
> 1.7.9.1
>
>
> --
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
--
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20120321/f38a1a0c/attachment.pgp>
More information about the AppArmor
mailing list