public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: chrubis@suse.cz
To: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
Cc: vasily.isaenko@oracle.com, ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH] syscalls/setgroups: fix implicit SETGROUPS parameter casting
Date: Thu, 22 Aug 2013 15:13:21 +0200	[thread overview]
Message-ID: <20130822131321.GA11897@rei.ASUS> (raw)
In-Reply-To: <1376637057-1744-1-git-send-email-stanislav.kholmanskikh@oracle.com>

> One of parameters to setgroups() syscall is (gid_t *) pointer.
> If TST_USE_COMPAT16_VSYSCALL is defined a pointer to GID_T is passed
> instead (and sizeof(GID_T) < sizeof(gid_t)). It's not safe and
> can result in unaligned access (and SIGBUS) on several platforms.
> 
> Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com>
> ---
>  testcases/kernel/syscalls/setgroups/compat_16.h   |   22 +++++++++++++++++++-
>  testcases/kernel/syscalls/setgroups/setgroups04.c |    6 ++++-
>  2 files changed, 25 insertions(+), 3 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/setgroups/compat_16.h b/testcases/kernel/syscalls/setgroups/compat_16.h
> index 0de4e78..35723d6 100644
> --- a/testcases/kernel/syscalls/setgroups/compat_16.h
> +++ b/testcases/kernel/syscalls/setgroups/compat_16.h
> @@ -32,9 +32,27 @@ extern void cleanup(void);
>  #ifdef TST_USE_COMPAT16_SYSCALL
>  
>  long
> -SETGROUPS(size_t gidsetsize, GID_T *list)
> +SETGROUPS(size_t gidsetsize, GID_T *list16)
>  {
> -	return ltp_syscall(__NR_setgroups, gidsetsize, list);
> +	int r;
> +	int i;
> +
> +	gid_t *list32;
> +
> +	list32 = calloc(gidsetsize, sizeof(gid_t));
> +	if (list32 == NULL)
> +		tst_brkm(TBROK | TERRNO, NULL,
> +			"calloc failed to allocate %zu bytes at %s:%d",
> +			gidsetsize * sizeof(gid_t),
> +			__FILE__, __LINE__);
> +
> +	for (i = 0; i < gidsetsize; i++)
> +		list32[i] = list16[i];
> +
> +	r = ltp_syscall(__NR_setgroups, gidsetsize, list32);
> +
> +	free(list32);
> +	return r;
>  }

This looks like the __NR_setgroups is not the compact16 one we want.

Look at the getgroups16 in kernel/uid16.c it calls groups16_from_user()
and that does:


        for (i = 0; i < group_info->ngroups; i++) {
                if (get_user(group, grouplist+i))
                        return  -EFAULT;


The grouplist is of old_gid_t __user *grouplist type so it's unsigned short, so
it works with array of unsigned short which is aligned to unsigned shorts due
to definiton of the GID_T in the test sources, there is no way this
would trigger unaligned access.

And actually the GETGROUPS() seems to be coded to pass list32 and converts it
to list16 which looks just wrong to me as it's inside of
TST_USE_COMPAT16_SYSCALL. It just looks to me like we have wrong syscall
number to begin with.

-- 
Cyril Hrubis
chrubis@suse.cz

------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and 
AppDynamics. Performance Central is your source for news, insights, 
analysis and resources for efficient Application Performance Management. 
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  reply	other threads:[~2013-08-22 13:13 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-16  7:10 [LTP] [PATCH] syscalls/setgroups: fix implicit SETGROUPS parameter casting Stanislav Kholmanskikh
2013-08-22 13:13 ` chrubis [this message]
     [not found]   ` <52174875.9030606@oracle.com>
2013-08-23 11:39     ` chrubis
     [not found]       ` <521B331D.7050902@oracle.com>
2013-08-26 11:30         ` chrubis
     [not found]           ` <521B4D82.2060007@oracle.com>
2013-08-26 14:16             ` chrubis
     [not found]               ` <521B6875.8010202@oracle.com>
2013-08-27  9:35                 ` [LTP] [PATCH V2 1/2] syscalls/setgroups: fix 16-bit versions of the testcases Stanislav Kholmanskikh
2013-08-27  9:35                 ` [LTP] [PATCH V2 2/2] syscalls/getgroups: added checks for 16-bit getgroups() syscall Stanislav Kholmanskikh
2013-08-27 12:16                   ` chrubis
     [not found]                     ` <521D9C44.8090607@oracle.com>
2013-08-28  9:55                       ` chrubis
     [not found]                         ` <1377782535-15955-3-git-send-email-stanislav.kholmanskikh@oracle.com>
2013-09-02 15:23                           ` [LTP] [PATCH V3 2/3] fixes for 16-bit syscalls testcases chrubis
     [not found]                             ` <52259811.3000604@oracle.com>
2013-09-03 10:11                               ` chrubis
     [not found]                                 ` <1378215677-14258-1-git-send-email-stanislav.kholmanskikh@oracle.com>
2013-09-04 13:37                                   ` [LTP] [PATCH V3.1 2/2] " chrubis
     [not found]                                     ` <1378364509-20971-1-git-send-email-stanislav.kholmanskikh@oracle.com>
2013-09-05 11:07                                       ` [LTP] [PATCH V4] 16-bit syscalls fixes chrubis
2013-09-09 12:07                                       ` chrubis
     [not found]                         ` <1377782535-15955-4-git-send-email-stanislav.kholmanskikh@oracle.com>
2013-09-02 15:28                           ` [LTP] [PATCH V3 3/3] syscalls/getgroups: added checks for 16-bit getgroups() syscall chrubis
     [not found]                         ` <1377782535-15955-2-git-send-email-stanislav.kholmanskikh@oracle.com>
2013-09-02 15:59                           ` [LTP] [PATCH V3 1/3] syscalls/utils/compat_16.mk: fix build dependencies chrubis
     [not found]                             ` <52257D67.5020900@oracle.com>
2013-09-03 11:06                               ` chrubis
2013-08-27 11:22                 ` [LTP] [PATCH] syscalls/setgroups: fix implicit SETGROUPS parameter casting chrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130822131321.GA11897@rei.ASUS \
    --to=chrubis@suse.cz \
    --cc=ltp-list@lists.sourceforge.net \
    --cc=stanislav.kholmanskikh@oracle.com \
    --cc=vasily.isaenko@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox