On Thu, 2008-07-31 at 20:33 +0900, Masatake YAMATO wrote:
> Hi, Subrata
> 
> You wrote:
> > 2) setgid16
> > Comments: We have setgid at *testcases/kernel/syscalls/setgid. *You may need
> > to include/port setgid16 on similar lines to sendfile64 and fadvise64.
> 
> I've tried this task.
> 
> Please put compat_16.h to testcases/kernel/syscalls/setgid.
> And apply following patch before rebuilding tests.
> 
> In addition I removed one getgid() invocation in
> testcases/kernel/syscalls/setgid/setgid02.c because the returned value
> is not used anywhere in the program.
> 
> Signed-off-by: Masatake YAMATO <[EMAIL PROTECTED]>
> 
Thanks very much. This works perfectly fine. See the results below:

1) Linux 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:12 EDT 2008 i686 i686
i386 GNU/Linux,
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

2) Linux 2.6.9-74.EL #1 Tue Jun 17 16:42:36 EDT 2008 i686 athlon i386
GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

3) Linux 2.6.18-91.el5 #1 SMP Tue Apr 22 17:43:57 EDT 2008 x86_64 x86_64
x86_64 GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

4) Linux 2.6.9-22.EL #1 SMP Mon Sep 19 17:52:20 EDT 2005 ppc64 ppc64
ppc64 GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

5) Linux 2.4.21-37.ELsmp #1 SMP Wed Sep 7 13:28:55 EDT 2005 i686 i686
i386 GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

6) Linux 2.6.18-91.el5 #1 SMP Tue Apr 22 17:48:59 EDT 2008 ppc64 ppc64
ppc64 GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

7) Linux 2.6.18-91.el5PAE #1 SMP Tue Apr 22 17:58:37 EDT 2008 i686
athlon i386 GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

8) Linux 2.6.25-gcov-nomodconfig-smp #1 SMP Thu Jun 12 06:29:27 EDT 2008
i686 i686 i386 GNU/Linux
BUILD=Pass,
INSTALL=Pass,
RUN=Pass,
setgid01    1  PASS  :  setgid(0) returned 0
setgid02    1  PASS  :  setgid returned EPERM
setgid03    1  PASS  :  functionality of getgid() is correct

The same stands merged.

Regards--
Subrata

> 
> Index: runtest/syscalls
> ===================================================================
> RCS file: /cvsroot/ltp/ltp/runtest/syscalls,v
> retrieving revision 1.202
> diff -c -r1.202 syscalls
> *** runtest/syscalls  26 Jul 2008 04:15:36 -0000      1.202
> --- runtest/syscalls  31 Jul 2008 11:26:37 -0000
> ***************
> *** 745,752 ****
> --- 745,755 ----
>   setfsuid03 setfsuid03
>   
>   setgid01 setgid01
> + setgid01_16 setgid01_16
>   setgid02 setgid02
> + setgid02_16 setgid02_16
>   setgid03 setgid03
> + setgid03_16 setgid03_16
>   
>   setegid01 setegid01
>   
> Index: testcases/kernel/syscalls/setgid/Makefile
> ===================================================================
> RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/setgid/Makefile,v
> retrieving revision 1.7
> diff -c -r1.7 Makefile
> *** testcases/kernel/syscalls/setgid/Makefile 21 Aug 2006 06:58:45 -0000      
> 1.7
> --- testcases/kernel/syscalls/setgid/Makefile 31 Jul 2008 11:27:23 -0000
> ***************
> *** 19,26 ****
>   CFLAGS += -I../../../../include -Wall
>   LDLIBS += -L../../../../lib -lltp
>   
> ! SRCS    = $(wildcard *.c)
> ! TARGETS = $(patsubst %.c,%,$(SRCS))
>   
>   all: $(TARGETS)
>   
> --- 19,33 ----
>   CFLAGS += -I../../../../include -Wall
>   LDLIBS += -L../../../../lib -lltp
>   
> ! SRCS    = $(wildcard *[0-9][0-9].c)
> ! TARGETS = $(patsubst %.c,%,$(SRCS)) $(patsubst %.c,%_16,$(SRCS))
> ! 
> ! 
> ! %.c: compat_16.h
> ! %_16.c: %.c 
> !     echo "#define USE_COMPAT16_SYSCALL 1" > $@
> !     cat $< >> $@
> ! 
>   
>   all: $(TARGETS)
>   
> Index: testcases/kernel/syscalls/setgid/setgid01.c
> ===================================================================
> RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/setgid/setgid01.c,v
> retrieving revision 1.2
> diff -c -r1.2 setgid01.c
> *** testcases/kernel/syscalls/setgid/setgid01.c       26 May 2006 06:26:40 
> -0000      1.2
> --- testcases/kernel/syscalls/setgid/setgid01.c       31 Jul 2008 11:27:23 
> -0000
> ***************
> *** 118,131 ****
>   void setup();
>   void cleanup();
>   
> ! 
>   
>   char *TCID="setgid01";              /* Test program identifier.    */
>   int TST_TOTAL=1;                    /* Total number of test cases. */
>   extern int Tst_count;               /* Test Case counter for tst_* routines 
> */
>   
>   int exp_enos[]={0, 0};
> ! int gid;
>   
>   int
>   main(int ac, char **av)
> --- 118,131 ----
>   void setup();
>   void cleanup();
>   
> ! #include "compat_16.h"
>   
>   char *TCID="setgid01";              /* Test program identifier.    */
>   int TST_TOTAL=1;                    /* Total number of test cases. */
>   extern int Tst_count;               /* Test Case counter for tst_* routines 
> */
>   
>   int exp_enos[]={0, 0};
> ! GID_T gid;
>   
>   int
>   main(int ac, char **av)
> ***************
> *** 158,164 ****
>       /* 
>        * Call setgid(2) 
>        */
> !     TEST(setgid(gid));
>       
>       /* check return code */
>       if ( TEST_RETURN == -1 ) {
> --- 158,164 ----
>       /* 
>        * Call setgid(2) 
>        */
> !     TEST(SETGID(gid));
>       
>       /* check return code */
>       if ( TEST_RETURN == -1 ) {
> ***************
> *** 196,203 ****
>   
>       /* Pause if that option was specified */
>       TEST_PAUSE;
> ! 
> !     gid = getgid();
>   }   /* End setup() */
>   
>   
> --- 196,203 ----
>   
>       /* Pause if that option was specified */
>       TEST_PAUSE;
> !     
> !     gid = GETGID();
>   }   /* End setup() */
>   
>   
> Index: testcases/kernel/syscalls/setgid/setgid02.c
> ===================================================================
> RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/setgid/setgid02.c,v
> retrieving revision 1.4
> diff -c -r1.4 setgid02.c
> *** testcases/kernel/syscalls/setgid/setgid02.c       27 Mar 2003 20:06:03 
> -0000      1.4
> --- testcases/kernel/syscalls/setgid/setgid02.c       31 Jul 2008 11:27:23 
> -0000
> ***************
> *** 61,71 ****
>   void setup(void);
>   void cleanup(void);
>   
>   int exp_enos[] = {EPERM, 0};
>   
>   int main(int ac, char **av)
>   {
> -     int gid;
>       struct passwd *getpwnam(), *rootpwent;
>   
>       int lc;                         /* loop counter */
> --- 61,72 ----
>   void setup(void);
>   void cleanup(void);
>   
> + #include "compat_16.h"
> + 
>   int exp_enos[] = {EPERM, 0};
>   
>   int main(int ac, char **av)
>   {
>       struct passwd *getpwnam(), *rootpwent;
>   
>       int lc;                         /* loop counter */
> ***************
> *** 86,99 ****
>               /* reset Tst_count in case we are looping */
>               Tst_count = 0;
>   
> -             gid = getgid();
>   
>               if ((rootpwent = getpwnam(root)) == NULL) {
>                       tst_brkm(TBROK, cleanup, "getpwnam failed for user id "
>                                "%s", root);
>               }
>   
> !             TEST(setgid(rootpwent->pw_gid));
>   
>               if (TEST_RETURN != -1) {
>                       tst_resm(TFAIL, "call succeeded unexpectedly");
> --- 87,106 ----
>               /* reset Tst_count in case we are looping */
>               Tst_count = 0;
>   
>   
>               if ((rootpwent = getpwnam(root)) == NULL) {
>                       tst_brkm(TBROK, cleanup, "getpwnam failed for user id "
>                                "%s", root);
>               }
>   
> !             if (!COMPAT_SIZE_CHECK(rootpwent->pw_gid)) {
> !              tst_brkm(TBROK, 
> !                       cleanup, 
> !                       "gid for `%s' is too large for testing setgid16", 
> !                       root);
> !             }
> !             
> !             TEST(SETGID(rootpwent->pw_gid));
>   
>               if (TEST_RETURN != -1) {
>                       tst_resm(TFAIL, "call succeeded unexpectedly");
> ***************
> *** 125,131 ****
>           if (geteuid() != 0) {
>                   tst_brkm(TBROK, tst_exit, "Test must be run as root");
>           }
> !          ltpuser = getpwnam(nobody_uid);
>        if (setgid(ltpuser->pw_gid) == -1) {
>                   tst_resm(TINFO, "setgid failed to "
>                            "to set the effective gid to %d",
> --- 132,146 ----
>           if (geteuid() != 0) {
>                   tst_brkm(TBROK, tst_exit, "Test must be run as root");
>           }
> !     ltpuser = getpwnam(nobody_uid);
> ! 
> !      if (!COMPAT_SIZE_CHECK(ltpuser->pw_gid)) {
> !              tst_brkm(TBROK, 
> !                       cleanup, 
> !                       "gid for `%s' is too large for testing setgid16", 
> !                       nobody_gid);
> !      }
> ! 
>        if (setgid(ltpuser->pw_gid) == -1) {
>                   tst_resm(TINFO, "setgid failed to "
>                            "to set the effective gid to %d",
> Index: testcases/kernel/syscalls/setgid/setgid03.c
> ===================================================================
> RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/setgid/setgid03.c,v
> retrieving revision 1.3
> diff -c -r1.3 setgid03.c
> *** testcases/kernel/syscalls/setgid/setgid03.c       27 Mar 2003 20:06:03 
> -0000      1.3
> --- testcases/kernel/syscalls/setgid/setgid03.c       31 Jul 2008 11:27:23 
> -0000
> ***************
> *** 59,64 ****
> --- 59,66 ----
>   void setup(void);
>   void cleanup(void);
>   
> + #include "compat_16.h"
> + 
>   int main(int ac, char **av)
>   {
>       int lc;                         /* loop counter */
> ***************
> *** 135,140 ****
> --- 137,151 ----
>               tst_brkm(TBROK, cleanup, "getpwnam failed for user "
>                        "id %s", ltpuser1);
>       }
> + 
> +     if (!(COMPAT_SIZE_CHECK(rootpwent->pw_gid))) {
> +             tst_brkm(TBROK, 
> +                      cleanup, 
> +                      "gid for `%s' is too large for testing setgid16", 
> +                      root);
> +     }
> +       
> +     
>   }
>   
>   /*
> plain text document attachment (compat_16.h)
> /*
>  *
>  *   Copyright (c) Red Hat Inc., 2008
>  *
>  *   This program is free software;  you can redistribute it and/or modify
>  *   it under the terms of the GNU General Public License as published by
>  *   the Free Software Foundation; either version 2 of the License, or
>  *   (at your option) any later version.
>  *
>  *   This program is distributed in the hope that it will be useful,
>  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
>  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
>  *   the GNU General Public License for more details.
>  *
>  *   You should have received a copy of the GNU General Public License
>  *   along with this program;  if not, write to the Free Software
>  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
>  */
> 
> /* Author: Masatake YAMATO <[EMAIL PROTECTED]> */
> 
> #ifndef __SETGID_COMPAT_16_H__
> #define __SETGID_COMPAT_16_H__
> 
> 
> #include <asm/posix_types.h>
> #include "linux_syscall_numbers.h"
> 
> 
> #ifdef USE_COMPAT16_SYSCALL
> typedef __kernel_old_gid_t GID_T;
> int 
> COMPAT_SIZE_CHECK(gid_t gid)
> {
>       /* See high2lowgid in linux/highuid.h
>          Return 0 if gid is too large to store
>          it to __kernel_old_gid_t. */
>       return ((gid) & ~0xFFFF)? 0: 1;
> }
> int 
> SETGID(GID_T gid)
> {
>       return syscall(__NR_setgid, gid);
> }
> GID_T
> GETGID(void)
> {
>       gid_t gid;
> 
>       gid = getgid();
>       if (!COMPAT_SIZE_CHECK(gid))
>         tst_brkm(TBROK, 
>                  cleanup, 
>                  "gid for the current process is too large for testing 
> setgid16");
> 
>       return (GID_T)gid;
> }
> #else
> typedef gid_t GID_T;
> int 
> COMPAT_SIZE_CHECK(gid_t gid)
> {
>       return 1;
> }
> int 
> SETGID(GID_T gid)
> {
>       return setgid(gid);
> }
> GID_T
> GETGID(void)
> {
>       return getgid();
> }
> #endif
> 
> #endif /* __SETGID_COMPAT_16_H__ */
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________ Ltp-list mailing list 
> [email protected] 
> https://lists.sourceforge.net/lists/listinfo/ltp-list


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to