1 #include "defs.h"
2 
3 #define MS_RDONLY	 1	/* Mount read-only */
4 #define MS_NOSUID	 2	/* Ignore suid and sgid bits */
5 #define MS_NODEV	 4	/* Disallow access to device special files */
6 #define MS_NOEXEC	 8	/* Disallow program execution */
7 #define MS_SYNCHRONOUS	16	/* Writes are synced at once */
8 #define MS_REMOUNT	32	/* Alter flags of a mounted FS */
9 #define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */
10 #define MS_DIRSYNC	128	/* Directory modifications are synchronous */
11 #define MS_NOATIME	1024	/* Do not update access times. */
12 #define MS_NODIRATIME	2048	/* Do not update directory access times */
13 #define MS_BIND		4096
14 #define MS_MOVE		8192
15 #define MS_REC		16384
16 #define MS_SILENT	32768
17 #define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */
18 #define MS_UNBINDABLE	(1<<17)	/* change to unbindable */
19 #define MS_PRIVATE	(1<<18)	/* change to private */
20 #define MS_SLAVE	(1<<19)	/* change to slave */
21 #define MS_SHARED	(1<<20)	/* change to shared */
22 #define MS_RELATIME	(1<<21)
23 #define MS_KERNMOUNT	(1<<22)
24 #define MS_I_VERSION	(1<<23)
25 #define MS_STRICTATIME	(1<<24)
26 #define MS_NOSEC	(1<<28)
27 #define MS_BORN		(1<<29)
28 #define MS_ACTIVE	(1<<30)
29 #define MS_NOUSER	(1<<31)
30 #define MS_MGC_VAL	0xc0ed0000	/* Magic flag number */
31 #define MS_MGC_MSK	0xffff0000	/* Magic flag mask */
32 
33 #include "xlat/mount_flags.h"
34 
SYS_FUNC(mount)35 SYS_FUNC(mount)
36 {
37 	if (entering(tcp)) {
38 		int ignore_type = 0, ignore_data = 0;
39 		unsigned long flags = tcp->u_arg[3];
40 
41 		/* Discard magic */
42 		if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
43 			flags &= ~MS_MGC_MSK;
44 
45 		if (flags & MS_REMOUNT)
46 			ignore_type = 1;
47 		else if (flags & (MS_BIND | MS_MOVE))
48 			ignore_type = ignore_data = 1;
49 
50 		printpath(tcp, tcp->u_arg[0]);
51 		tprints(", ");
52 
53 		printpath(tcp, tcp->u_arg[1]);
54 		tprints(", ");
55 
56 		if (ignore_type && tcp->u_arg[2])
57 			tprintf("%#lx", tcp->u_arg[2]);
58 		else
59 			printstr(tcp, tcp->u_arg[2], -1);
60 		tprints(", ");
61 
62 		printflags(mount_flags, tcp->u_arg[3], "MS_???");
63 		tprints(", ");
64 
65 		if (ignore_data && tcp->u_arg[4])
66 			tprintf("%#lx", tcp->u_arg[4]);
67 		else
68 			printstr(tcp, tcp->u_arg[4], -1);
69 	}
70 	return 0;
71 }
72