2016-05-25 00:11:37 +00:00
/*
* Check decoding of mount syscall .
*
* Copyright ( c ) 2016 Dmitry V . Levin < ldv @ altlinux . org >
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` AS IS ' ' AND ANY EXPRESS OR
* IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED .
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT , INDIRECT ,
* INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
# include "tests.h"
# include <stdio.h>
# include <unistd.h>
# include <sys/mount.h>
# ifndef MS_MGC_VAL
# define MS_MGC_VAL 0xC0ED0000
# endif
# ifndef MS_RELATIME
# define MS_RELATIME (1ul << 21)
# endif
2018-04-04 23:03:26 +02:00
# if XLAT_RAW
# define str_mgc_val "0xc0ed0000"
# define str_remount "0x20"
# define str_bind "0x1000"
# define str_ro_nosuid_nodev_noexec "0xf"
# define str_ro_nosuid_nodev_noexec_relatime "0x20000f"
# elif XLAT_VERBOSE
# define str_mgc_val "0xc0ed0000 /* MS_MGC_VAL */ "
# define str_remount "0x20 /* MS_REMOUNT */ "
# define str_bind "0x1000 /* MS_BIND */ "
# define str_ro_nosuid_nodev_noexec \
" 0xf /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC */ "
# define str_ro_nosuid_nodev_noexec_relatime \
" 0x20000f /* MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME */ "
# else /* !XLAT_RAW && !XLAT_VERBOSE */
# define str_mgc_val "MS_MGC_VAL"
# define str_remount "MS_REMOUNT"
# define str_bind "MS_BIND"
# define str_ro_nosuid_nodev_noexec "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC"
# define str_ro_nosuid_nodev_noexec_relatime \
" MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME "
# endif /* XLAT_RAW, XLAT_VERBOSE */
2016-05-25 00:11:37 +00:00
int
main ( void )
{
static const char source [ ] = " mount_source " ;
static const char target [ ] = " mount_target " ;
static const char fstype [ ] = " mount_fstype " ;
static const char data [ ] = " mount_data " ;
int rc = mount ( source , target , fstype , 15 , data ) ;
2018-04-28 20:48:52 +00:00
printf ( " mount( \" %s \" , \" %s \" , \" %s \" , %s, \" %s \" ) = %s \n " ,
2016-05-25 00:11:37 +00:00
source , target , fstype , str_ro_nosuid_nodev_noexec ,
2018-04-28 20:48:52 +00:00
data , sprintrc ( rc ) ) ;
2016-05-25 00:11:37 +00:00
rc = mount ( source , target , fstype , MS_RELATIME | 15 , data ) ;
2018-04-28 20:48:52 +00:00
printf ( " mount( \" %s \" , \" %s \" , \" %s \" , %s, \" %s \" ) = %s \n " ,
2016-05-25 00:11:37 +00:00
source , target , fstype ,
2018-04-04 23:03:26 +02:00
str_ro_nosuid_nodev_noexec_relatime ,
2018-04-28 20:48:52 +00:00
data , sprintrc ( rc ) ) ;
2016-05-25 00:11:37 +00:00
rc = mount ( source , target , fstype , MS_MGC_VAL , data ) ;
2018-04-28 20:48:52 +00:00
printf ( " mount( \" %s \" , \" %s \" , \" %s \" , %s, \" %s \" ) = %s \n " ,
source , target , fstype , str_mgc_val , data , sprintrc ( rc ) ) ;
2016-05-25 00:11:37 +00:00
rc = mount ( source , target , fstype , MS_MGC_VAL | 15 , data ) ;
2018-04-28 20:48:52 +00:00
printf ( " mount( \" %s \" , \" %s \" , \" %s \" , %s, \" %s \" ) = %s \n " ,
2016-05-25 00:11:37 +00:00
source , target , fstype ,
2018-04-04 23:03:26 +02:00
str_mgc_val " | " str_ro_nosuid_nodev_noexec ,
2018-04-28 20:48:52 +00:00
data , sprintrc ( rc ) ) ;
2016-05-25 00:11:37 +00:00
rc = mount ( source , target , fstype , MS_REMOUNT , data ) ;
2018-04-28 20:48:52 +00:00
printf ( " mount( \" %s \" , \" %s \" , %p, %s, \" %s \" ) = %s \n " ,
source , target , fstype , str_remount , data , sprintrc ( rc ) ) ;
2016-05-25 00:11:37 +00:00
rc = mount ( source , target , fstype , MS_BIND , data ) ;
2018-04-28 20:48:52 +00:00
printf ( " mount( \" %s \" , \" %s \" , %p, %s, %p) = %s \n " ,
source , target , fstype , str_bind , data , sprintrc ( rc ) ) ;
2016-05-25 00:11:37 +00:00
puts ( " +++ exited with 0 +++ " ) ;
return 0 ;
}