]> Zhao Yanbai Git Server - minix.git/commitdiff
Make dev_t 32-bits and provide backwards compatibility
authorThomas Veerman <thomas@minix3.org>
Wed, 31 Aug 2011 13:38:28 +0000 (13:38 +0000)
committerThomas Veerman <thomas@minix3.org>
Mon, 5 Sep 2011 08:52:57 +0000 (08:52 +0000)
15 files changed:
include/minix/types.h
include/net/ioctl.h
include/sys/stat.h
nbsd_include/sys/ioc_net.h
nbsd_include/sys/stat.h
nbsd_include/sys/types.h
servers/apfs/dev_uds.c
servers/apfs/proto.h
servers/apfs/uds.c
servers/apfs/uds.h
servers/inet/inet_config.c
servers/pfs/dev_uds.c
servers/pfs/proto.h
servers/pfs/uds.c
servers/pfs/uds.h

index 1d1ef3149abc312b23c246c655d047f0635aec51..4c46763dd416c87e86d98a98857719d8ef650a3b 100644 (file)
@@ -98,7 +98,7 @@ typedef long key_t;
 /* Open Group Base Specifications Issue 6 (not complete) */
 typedef long useconds_t;       /* Time in microseconds */
 
-typedef short          dev_t;     /* holds (major|minor) device pair */
+typedef u32_t          dev_t;     /* holds (major|minor) device pair */
 typedef u32_t          big_dev_t;
 
 /* Types used in disk, inode, etc. data structures.
index feba25012c5d85c6b87ce43af1a6bfb81f627354..71ca4752b9a64e35c746b8e0f003e458f8257b59 100644 (file)
@@ -73,6 +73,7 @@ struct msg_control
 #define NWIOSUDSBLOG   _IOW ('n', 73, int)                /* listen() */
 #define NWIOSUDSCONN   _IOW ('n', 74, struct sockaddr_un) /* connect() */
 #define NWIOSUDSSHUT    _IOW ('n', 75, int)              /* shutdown() */
+#define NWIOSUDSPAIROLD        _IOW ('n', 76, short)             /* socketpair() */
 #define NWIOSUDSPAIR   _IOW ('n', 76, dev_t)             /* socketpair() */
 #define NWIOSUDSACCEPT _IOW ('n', 77, struct sockaddr_un) /* accept() */
 #define NWIOSUDSCTRL   _IOW ('n', 78, struct msg_control) /* sendmsg() */
index 3af7b8d92c5ea8a07106dcc4ccb377d1b87a45f3..ee7b7fc8aa1fa79384bcbb3dabd2d5b2b7bbeaaf 100644 (file)
@@ -47,13 +47,13 @@ struct stat {
 
 
 struct minix_prev_stat {
-  dev_t st_dev;                        /* major/minor device number */
+  short st_dev;                        /* major/minor device number */
   ino_t st_ino;                        /* i-node number */
   mode_t st_mode;              /* file mode, protection bits, etc. */
   nlink_t st_nlink;            /* # links; */
   uid_t st_uid;                        /* uid of the file's owner */
   short int st_gid;            /* gid; TEMPORARY HACK: should be gid_t */
-  dev_t st_rdev;
+  short st_rdev;
   off_t st_size;               /* file size */
   time_t st_atime;             /* time of last access */
   time_t st_mtime;             /* time of last data modification */
index 12f4188a2aa0c341c6577fcbe107707be48a8210..b2f831b601843653028117a3675894b284ae61e5 100644 (file)
@@ -77,6 +77,7 @@ struct msg_control
 #define NWIOSUDSCONN   _IOW ('n', 74, struct sockaddr_un) /* connect() */
 #define NWIOSUDSSHUT    _IOW ('n', 75, int)              /* shutdown() */
 #define NWIOSUDSPAIR   _IOW ('n', 76, dev_t)             /* socketpair() */
+#define NWIOSUDSPAIROLD        _IOW ('n', 76, short)             /* socketpair() */
 #define NWIOSUDSACCEPT _IOW ('n', 77, struct sockaddr_un) /* accept() */
 #define NWIOSUDSCTRL   _IOW ('n', 78, struct msg_control) /* sendmsg() */
 #define NWIOGUDSCTRL   _IORW('n', 79, struct msg_control) /* recvmsg() */
index 27324e62221b360851364e1319b7a62ddf898a22..fd89f9defb804eef07a5b98d6491651868a3ae67 100644 (file)
@@ -42,13 +42,13 @@ struct stat {
 
 
 struct minix_prev_stat {
-  dev_t st_dev;                        /* major/minor device number */
+  short st_dev;                        /* major/minor device number */
   ino_t st_ino;                        /* i-node number */
   mode_t st_mode;              /* file mode, protection bits, etc. */
   nlink_t st_nlink;            /* # links; */
   uid_t st_uid;                        /* uid of the file's owner */
   short int st_gid;            /* gid; TEMPORARY HACK: should be gid_t */
-  dev_t st_rdev;
+  short st_rdev;
   off_t st_size;               /* file size */
   time_t st_atime;             /* time of last access */
   time_t st_mtime;             /* time of last data modification */
index 546641a8c3bb99e30f2cc1db8259d09f1a26b2cc..9dcf4fd9db5628ad645c610bbe5e0b4beb24dca0 100644 (file)
@@ -193,7 +193,7 @@ typedef     int64_t         daddr_t;        /* disk address */
 #endif
 
 
-typedef        short           dev_t;          /* device number */
+typedef        uint32_t        dev_t;          /* device number */
 typedef        uint32_t        fixpt_t;        /* fixed point number */
 
 #ifndef        gid_t
index b88f3ee1ecec1682f8223c81a1b10354ddb5330a..e16ad099c3742fdc65c4ab581b4299c63a8e3f0f 100644 (file)
@@ -855,6 +855,13 @@ PUBLIC int uds_ioctl(message *dev_m_in, message *dev_m_out)
 
                        break;
 
+               case NWIOSUDSPAIROLD:
+
+                       /* connect two sockets -- socketpair() */
+                       rc = do_socketpair_old(dev_m_in, dev_m_out);
+
+                       break;
+
                case NWIOGUDSSOTYPE:
 
                        /* get socket type -- getsockopt(SO_TYPE) */
index fe28b2895dddb4519890033d16b979f706b01c77..e0da813670fc06fac7d1860704d1271813932af0 100644 (file)
@@ -80,6 +80,7 @@ _PROTOTYPE( int do_getsockname, (message *dev_m_in, message *dev_m_out)       );
 _PROTOTYPE( int do_getpeername, (message *dev_m_in, message *dev_m_out)        );
 _PROTOTYPE( int do_shutdown, (message *dev_m_in, message *dev_m_out)   );
 _PROTOTYPE( int do_socketpair, (message *dev_m_in, message *dev_m_out) );
+_PROTOTYPE( int do_socketpair_old, (message *dev_m_in, message *dev_m_out)     );
 _PROTOTYPE( int do_getsockopt_sotype,
                                (message *dev_m_in, message *dev_m_out) );
 _PROTOTYPE( int do_getsockopt_peercred,
index a0d629796ae6d405568e494c0e666ecf5ea4815d..67e5ae255ee9dd07b739e3499490caf2da895ff9 100644 (file)
@@ -882,6 +882,53 @@ PUBLIC int do_shutdown(message *dev_m_in, message *dev_m_out)
        return OK;
 }
 
+PUBLIC int do_socketpair_old(message *dev_m_in, message *dev_m_out)
+{
+       int rc;
+       short minorin;
+       int minorx, minory;
+       struct sockaddr_un addr;
+
+#if DEBUG == 1
+       static int call_count = 0;
+       printf("(uds) [%d] do_socketpair() call_count=%d\n",
+                               uds_minor(dev_m_in), ++call_count);
+#endif
+
+       /* first ioctl param is the first socket */
+       minorx = uds_minor_old(dev_m_in);
+
+       /* third ioctl param is the minor number of the second socket */
+       rc = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) dev_m_in->IO_GRANT,
+                       (vir_bytes) 0, (vir_bytes) &minorin, sizeof(short), D);
+
+       if (rc != OK) {
+               return EIO;
+       }
+
+       minory = minor(minorin);
+
+#if DEBUG == 1
+       printf("socketpair() %d - %d\n", minorx, minory);
+#endif
+
+       /* security check - both sockets must have the same endpoint (owner) */
+       if (uds_fd_table[minorx].owner != uds_fd_table[minory].owner) {
+
+               /* we won't allow you to magically connect your socket to
+                * someone elses socket
+                */
+               return EPERM;
+       }
+
+       addr.sun_family = AF_UNIX;
+       addr.sun_path[0] = 'X';
+       addr.sun_path[1] = '\0';
+
+       uds_fd_table[minorx].syscall_done = 1;
+       return perform_connection(dev_m_in, dev_m_out, &addr, minorx, minory);
+}
+
 PUBLIC int do_socketpair(message *dev_m_in, message *dev_m_out)
 {
        int rc;
@@ -906,7 +953,7 @@ PUBLIC int do_socketpair(message *dev_m_in, message *dev_m_out)
                return EIO;
        }
 
-       minory = (minor(minorin) & BYTE);
+       minory = minor(minorin);
 
 #if DEBUG == 1
        printf("socketpair() %d - %d\n", minorx, minory);
index 2c3d85520273473e32a72e2dcf8b44c634e37a2f..efcb9c1da9a35b682fd5b50560d20b6fe8168d80 100644 (file)
@@ -224,7 +224,8 @@ EXTERN uds_fd_t uds_fd_table[NR_FDS];
 /*
  * Take message m and get the index in uds_fd_table.
  */
-#define uds_minor(m)   (minor((dev_t) m->DEVICE) & BYTE)
+#define uds_minor(m)           (minor((dev_t) m->DEVICE))
+#define uds_minor_old(m)       (minor((short) m->DEVICE))
 
 /*
  * Fill in a reply message.
index af54173a83f68a4f2e144ad0f6f08a9f91eb02b5..2a04540da3e209085eb0eebe094deaa35d037de1 100644 (file)
@@ -67,7 +67,7 @@ static void check_mknod(char *device, mode_t mode, int minor)
        struct stat st;
        dev_t dev;
 
-       dev= (ip_dev & 0xFF00) | minor;
+       dev= makedev(major(ip_dev), minor);
 
        if (stat(device, &st) < 0) {
                if (errno != ENOENT) fatal(device);
@@ -77,7 +77,7 @@ static void check_mknod(char *device, mode_t mode, int minor)
        }
 
        if (mknod(device, S_IFCHR | mode, dev) < 0) fatal(device);
-       printf("mknod %s c %d %d\n", device, (ip_dev >> 8), minor);
+       printf("mknod %s c %d %d\n", device, major(ip_dev), minor);
 }
 
 static void check_ln(char *old, char *new)
index 3d6e73241bab01762066001a1f2aef72e25dcfef..c6033323e8023cf8934c59fb738faa6476f630af 100644 (file)
@@ -865,6 +865,13 @@ PUBLIC int uds_ioctl(message *dev_m_in, message *dev_m_out)
 
                        break;
 
+               case NWIOSUDSPAIROLD:
+
+                       /* connect two sockets -- socketpair() */
+                       rc = do_socketpair_old(dev_m_in, dev_m_out);
+
+                       break;
+
                case NWIOGUDSSOTYPE:
 
                        /* get socket type -- getsockopt(SO_TYPE) */
index e6dedfc99b67ab04c9885839f16eb58e6de5bd60..9ba371c97494932653907aba4e132283b79163bf 100644 (file)
@@ -77,6 +77,7 @@ _PROTOTYPE( int do_getsockname, (message *dev_m_in, message *dev_m_out)       );
 _PROTOTYPE( int do_getpeername, (message *dev_m_in, message *dev_m_out)        );
 _PROTOTYPE( int do_shutdown, (message *dev_m_in, message *dev_m_out)   );
 _PROTOTYPE( int do_socketpair, (message *dev_m_in, message *dev_m_out) );
+_PROTOTYPE( int do_socketpair_old, (message *dev_m_in, message *dev_m_out)     );
 _PROTOTYPE( int do_getsockopt_sotype,
                                (message *dev_m_in, message *dev_m_out) );
 _PROTOTYPE( int do_getsockopt_peercred,
index e184191c833f1d343f6dc7305617433583925d17..81efd2ef300cf90da6a8b1c63721346d6a823305 100644 (file)
@@ -884,6 +884,53 @@ PUBLIC int do_shutdown(message *dev_m_in, message *dev_m_out)
        return OK;
 }
 
+PUBLIC int do_socketpair_old(message *dev_m_in, message *dev_m_out)
+{
+       int rc;
+       short minorin;
+       int minorx, minory;
+       struct sockaddr_un addr;
+
+#if DEBUG == 1
+       static int call_count = 0;
+       printf("(uds) [%d] do_socketpair() call_count=%d\n",
+                               uds_minor(dev_m_in), ++call_count);
+#endif
+
+       /* first ioctl param is the first socket */
+       minorx = uds_minor_old(dev_m_in);
+
+       /* third ioctl param is the minor number of the second socket */
+       rc = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) dev_m_in->IO_GRANT,
+                       (vir_bytes) 0, (vir_bytes) &minorin, sizeof(short), D);
+
+       if (rc != OK) {
+               return EIO;
+       }
+
+       minory = minor(minorin);
+
+#if DEBUG == 1
+       printf("socketpair() %d - %d\n", minorx, minory);
+#endif
+
+       /* security check - both sockets must have the same endpoint (owner) */
+       if (uds_fd_table[minorx].owner != uds_fd_table[minory].owner) {
+
+               /* we won't allow you to magically connect your socket to
+                * someone elses socket
+                */
+               return EPERM;
+       }
+
+       addr.sun_family = AF_UNIX;
+       addr.sun_path[0] = 'X';
+       addr.sun_path[1] = '\0';
+
+       uds_fd_table[minorx].syscall_done = 1;
+       return perform_connection(dev_m_in, dev_m_out, &addr, minorx, minory);
+}
+
 PUBLIC int do_socketpair(message *dev_m_in, message *dev_m_out)
 {
        int rc;
@@ -908,7 +955,7 @@ PUBLIC int do_socketpair(message *dev_m_in, message *dev_m_out)
                return EIO;
        }
 
-       minory = (minor(minorin) & BYTE);
+       minory = minor(minorin);
 
 #if DEBUG == 1
        printf("socketpair() %d - %d\n", minorx, minory);
index cd754e3438f86dd9a83f36bddd90ad31809073e8..facfdbc33a883af2326186a430af41f3fa13b05d 100644 (file)
@@ -224,7 +224,8 @@ EXTERN uds_fd_t uds_fd_table[NR_FDS];
 /*
  * Take message m and get the index in uds_fd_table.
  */
-#define uds_minor(m)   (minor((dev_t) m->DEVICE) & BYTE)
+#define uds_minor(m)           (minor((dev_t) m->DEVICE))
+#define uds_minor_old(m)       (minor((short) m->DEVICE))
 
 /*
  * Fill in a reply message.