lkml.org 
[lkml]   [1998]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
SubjectUnix98 PTY and /dev/pts filesystem patch
Date
Hi folks,

If you're using Unix98 PTYs and *especially* if you're using the
/dev/pts filesystem, I would appreciate it if you would try out this
patch, which makes Unix98 and BSD PTYs no longer alias to each other
(with the resulting security hole), and allows more than 256 Unix98
PTYs:


diff -ur stock/linux-2.1.112/Documentation/Configure.help linux-2.1.112-smp/Documentation/Configure.help
--- stock/linux-2.1.112/Documentation/Configure.help Thu Jul 30 19:45:40 1998
+++ linux-2.1.112-smp/Documentation/Configure.help Thu Jul 30 19:40:33 1998
@@ -1160,6 +1160,26 @@
Say Y here to enable support in the dumb serial driver to support
the HUB6 card.

+Unix98 PTY support
+CONFIG_UNIX98_PTYS
+ Linux traditionally uses BSD-like /dev/ptyxx and /dev/ttyxx names
+ for pseudo-ttys (PTYs). This scheme has a number or problems. The
+ GNU C library 2.1 and later, however, supports the Unix98 naming
+ standard, using a cloning device /dev/ptmx and numbered devices in a
+ subdirectory /dev/pts/xxx. The device nodes in /dev/pts can be
+ automatically generated by the devpts virtual filesystem.
+
+ Say Y here if you are uncertain, unless you are very short on memory.
+
+Maximum number of Unix98 PTYs in use (0-2048)
+CONFIG_UNIX98_PTY_COUNT
+ The maximum number of Unix98 PTYs that can be used at any one time.
+ The default is 256, and should be enough for desktop systems,
+ however, server machines which support incoming telnet/rlogin/ssh
+ connections may want to increase this. When not in use, each
+ additional set of 256 PTYs occupy approximately 8K of kernel memory
+ on 32-bit architectures.
+
TGA Console Support
CONFIG_TGA_CONSOLE
Many Alpha systems (e.g the Multia) are shipped with a graphics card
@@ -6485,10 +6505,7 @@
/dev/pts/2, for example. The GNU C library glibc 2.1 contains the
requisite support for this mode of operation.

- This code is also available as a module called devpts.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read Documentation/modules.txt.
+ Say Y here if you have enabled support for Unix98 PTYs.

Macintosh partition map support
CONFIG_MAC_PARTITION
diff -ur stock/linux-2.1.112/arch/alpha/config.in linux-2.1.112-smp/arch/alpha/config.in
--- stock/linux-2.1.112/arch/alpha/config.in Fri Jul 10 15:18:29 1998
+++ linux-2.1.112-smp/arch/alpha/config.in Thu Jul 30 18:59:56 1998
@@ -248,11 +248,11 @@
fi
endmenu

+source drivers/char/Config.in
+
source fs/Config.in

source fs/nls/Config.in
-
-source drivers/char/Config.in

if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment
diff -ur stock/linux-2.1.112/arch/alpha/defconfig linux-2.1.112-smp/arch/alpha/defconfig
--- stock/linux-2.1.112/arch/alpha/defconfig Sun Jul 19 20:44:33 1998
+++ linux-2.1.112-smp/arch/alpha/defconfig Thu Jul 30 19:42:29 1998
@@ -196,6 +196,7 @@
# CONFIG_DGRS is not set
# CONFIG_EEXPRESS_PRO100 is not set
# CONFIG_NE2K_PCI is not set
+# CONFIG_TLAN is not set
# CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set
# CONFIG_DLCI is not set
@@ -223,36 +224,6 @@
# CONFIG_CD_NO_IDESCSI is not set

#
-# Filesystems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_EXT2_FS=y
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_FAT_FS is not set
-# CONFIG_MSDOS_FS is not set
-# CONFIG_UMSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_NFS_FS=y
-# CONFIG_NFSD is not set
-CONFIG_SUNRPC=y
-CONFIG_LOCKD=y
-# CONFIG_CODA_FS is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_NLS is not set
-
-#
# Character devices
#
CONFIG_VT=y
@@ -261,6 +232,8 @@
# CONFIG_SERIAL_CONSOLE is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
CONFIG_MOUSE=y
# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
@@ -276,12 +249,42 @@
# CONFIG_VIDEO_DEV is not set
# CONFIG_NVRAM is not set
# CONFIG_JOYSTICK is not set
-# CONFIG_MISC_RADIO is not set

#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
+
+#
+# Filesystems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_EXT2_FS=y
+CONFIG_ISO9660_FS=y
+# CONFIG_JOLIET is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+CONFIG_PROC_FS=y
+CONFIG_NFS_FS=y
+# CONFIG_NFSD is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+# CONFIG_CODA_FS is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_NLS is not set

#
# Console drivers
diff -ur stock/linux-2.1.112/arch/i386/config.in linux-2.1.112-smp/arch/i386/config.in
--- stock/linux-2.1.112/arch/i386/config.in Sun Jul 12 22:36:20 1998
+++ linux-2.1.112-smp/arch/i386/config.in Thu Jul 30 18:59:35 1998
@@ -115,11 +115,11 @@
fi
endmenu

+source drivers/char/Config.in
+
source fs/Config.in

source fs/nls/Config.in
-
-source drivers/char/Config.in

if [ "$CONFIG_VT" = "y" ]; then
mainmenu_option next_comment
diff -ur stock/linux-2.1.112/arch/i386/defconfig linux-2.1.112-smp/arch/i386/defconfig
--- stock/linux-2.1.112/arch/i386/defconfig Fri Jul 24 23:16:50 1998
+++ linux-2.1.112-smp/arch/i386/defconfig Thu Jul 30 19:03:49 1998
@@ -216,36 +216,6 @@
# CONFIG_CD_NO_IDESCSI is not set

#
-# Filesystems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_EXT2_FS=y
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_FAT_FS is not set
-# CONFIG_MSDOS_FS is not set
-# CONFIG_UMSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_NFS_FS=y
-CONFIG_NFSD=y
-CONFIG_SUNRPC=y
-CONFIG_LOCKD=y
-# CONFIG_CODA_FS is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_AUTOFS_FS=y
-# CONFIG_UFS_FS is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_NLS is not set
-
-#
# Character devices
#
CONFIG_VT=y
@@ -254,6 +224,8 @@
# CONFIG_SERIAL_CONSOLE is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
CONFIG_MOUSE=y
# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
@@ -274,6 +246,37 @@
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
+
+#
+# Filesystems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_EXT2_FS=y
+CONFIG_ISO9660_FS=y
+# CONFIG_JOLIET is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+CONFIG_PROC_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFSD=y
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+# CONFIG_CODA_FS is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_AUTOFS_FS=y
+# CONFIG_UFS_FS is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_NLS is not set

#
# Console drivers
diff -ur stock/linux-2.1.112/arch/m68k/config.in linux-2.1.112-smp/arch/m68k/config.in
--- stock/linux-2.1.112/arch/m68k/config.in Wed Jun 24 14:44:00 1998
+++ linux-2.1.112-smp/arch/m68k/config.in Thu Jul 30 19:02:10 1998
@@ -228,15 +228,6 @@

fi

-source fs/Config.in
-
-if [ "$CONFIG_VME" = "n" ]; then
- define_bool CONFIG_FB y
- source drivers/video/Config.in
-fi
-
-source fs/nls/Config.in
-
mainmenu_option next_comment
comment 'Character devices'

@@ -323,6 +314,14 @@
fi
endmenu

+source fs/Config.in
+
+if [ "$CONFIG_VME" = "n" ]; then
+ define_bool CONFIG_FB y
+ source drivers/video/Config.in
+fi
+
+source fs/nls/Config.in
mainmenu_option next_comment
comment 'Sound support'

diff -ur stock/linux-2.1.112/arch/mips/config.in linux-2.1.112-smp/arch/mips/config.in
--- stock/linux-2.1.112/arch/mips/config.in Fri May 8 00:13:22 1998
+++ linux-2.1.112-smp/arch/mips/config.in Thu Jul 30 19:00:15 1998
@@ -194,11 +194,11 @@
fi
fi

+source drivers/char/Config.in
+
source fs/Config.in

source fs/nls/Config.in
-
-source drivers/char/Config.in

mainmenu_option next_comment
comment 'Sound'
diff -ur stock/linux-2.1.112/arch/mips/defconfig linux-2.1.112-smp/arch/mips/defconfig
--- stock/linux-2.1.112/arch/mips/defconfig Fri May 8 00:13:23 1998
+++ linux-2.1.112-smp/arch/mips/defconfig Thu Jul 30 19:43:40 1998
@@ -51,7 +51,7 @@
# CONFIG_MODULES is not set

#
-# Floppy, IDE, and other block devices
+# Block devices
#
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_IDE=y
@@ -74,6 +74,7 @@
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set
@@ -94,7 +95,6 @@
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
-# CONFIG_IP_ACCT is not set
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
@@ -157,12 +157,11 @@
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
CONFIG_SCSI_NCR53C8XX=y
-# CONFIG_SCSI_NCR53C8XX_NVRAM_DETECT is not set
-# CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE is not set
-# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=4
CONFIG_SCSI_NCR53C8XX_SYNC=5
-# CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT is not set
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
@@ -174,7 +173,6 @@
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
-CONFIG_JAZZ_ESP=y

#
# Network device support
@@ -196,9 +194,10 @@
# CONFIG_CS89x0 is not set
# CONFIG_DE4X5 is not set
# CONFIG_DEC_ELCP is not set
-# CONFIG_DEC_ELCP is not set
# CONFIG_DGRS is not set
# CONFIG_EEXPRESS_PRO100 is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_TLAN is not set
# CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set
# CONFIG_DLCI is not set
@@ -214,12 +213,14 @@
# AX.25 network device drivers
#
# CONFIG_MKISS is not set
+# CONFIG_6PACK is not set
# CONFIG_BPQETHER is not set
# CONFIG_DMASCC is not set
# CONFIG_SCC is not set
# CONFIG_BAYCOM_SER_FDX is not set
# CONFIG_BAYCOM_SER_HDX is not set
# CONFIG_BAYCOM_PAR is not set
+# CONFIG_BAYCOM_EPP is not set
# CONFIG_SOUNDMODEM is not set

#
@@ -234,6 +235,31 @@
CONFIG_CDROM=y

#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+# CONFIG_MOUSE is not set
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_APM is not set
+# CONFIG_WATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_NVRAM is not set
+# CONFIG_JOYSTICK is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+
+#
# Filesystems
#
# CONFIG_QUOTA is not set
@@ -260,6 +286,7 @@
# CONFIG_ROMFS_FS is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_UFS_FS is not set
+CONFIG_DEVPTS_FS=y
# CONFIG_MAC_PARTITION is not set
CONFIG_NLS=y

@@ -292,30 +319,6 @@
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_KOI8_R is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-# CONFIG_SERIAL_CONSOLE is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_MOUSE is not set
-# CONFIG_QIC02_TAPE is not set
-# CONFIG_APM is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_RTC is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_NVRAM is not set
-# CONFIG_JOYSTICK is not set
-# CONFIG_MISC_RADIO is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set

#
# Sound
diff -ur stock/linux-2.1.112/arch/ppc/config.in linux-2.1.112-smp/arch/ppc/config.in
--- stock/linux-2.1.112/arch/ppc/config.in Wed Jun 24 14:44:00 1998
+++ linux-2.1.112-smp/arch/ppc/config.in Thu Jul 30 19:02:27 1998
@@ -170,13 +170,13 @@
fi
endmenu

-source fs/Config.in
-
-source fs/nls/Config.in
-
source drivers/video/Config.in

source drivers/char/Config.in
+
+source fs/Config.in
+
+source fs/nls/Config.in

#mainmenu_option next_comment
#comment 'Sound'
diff -ur stock/linux-2.1.112/arch/ppc/defconfig linux-2.1.112-smp/arch/ppc/defconfig
--- stock/linux-2.1.112/arch/ppc/defconfig Fri May 8 00:18:13 1998
+++ linux-2.1.112-smp/arch/ppc/defconfig Thu Jul 30 19:44:43 1998
@@ -1,5 +1,5 @@
#
-# Automatically generated make config: don't edit
+# Automatically generated by make menuconfig: don't edit
#

#
@@ -34,7 +34,8 @@
CONFIG_BINFMT_MISC=m
# CONFIG_BINFMT_JAVA is not set
# CONFIG_PARPORT is not set
-# CONFIG_ABSTRACT_CONSOLE is not set
+# CONFIG_FB is not set
+CONFIG_ABSCON_COMPAT=y
CONFIG_PMAC_CONSOLE=y
CONFIG_MAC_KEYBOARD=y
CONFIG_MAC_FLOPPY=y
@@ -56,14 +57,10 @@
# CONFIG_PNP is not set

#
-# Floppy, IDE, and other block devices
+# Block devices
#
# CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y
@@ -74,10 +71,6 @@
# CONFIG_BLK_DEV_RZ1000 is not set
# CONFIG_BLK_DEV_IDEPCI is not set
# CONFIG_IDE_CHIPSETS is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
@@ -101,25 +94,16 @@
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
-# CONFIG_IP_ACCT is not set
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y
# CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
CONFIG_INET_RARP=y
CONFIG_IP_NOSR=y
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
-
-#
-#
-#
# CONFIG_IPX is not set
CONFIG_ATALK=m
# CONFIG_X25 is not set
@@ -132,25 +116,16 @@
# CONFIG_NET_HW_FLOWCONTROL is not set
# CONFIG_CPU_IS_SLOW is not set
# CONFIG_NET_SCHED is not set
-# CONFIG_NET_PROFILE is not set

#
# SCSI support
#
CONFIG_SCSI=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
# CONFIG_CHR_DEV_SG is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
# CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_LOGGING is not set
@@ -205,6 +180,7 @@
# CONFIG_EQUALIZER is not set
CONFIG_NET_ETHERNET=y
CONFIG_MACE=y
+# CONFIG_BMAC is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
@@ -221,9 +197,11 @@
CONFIG_DEC_ELCP=m
# CONFIG_DGRS is not set
# CONFIG_EEXPRESS_PRO100 is not set
+# CONFIG_LNE390 is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_TLAN is not set
# CONFIG_ES3210 is not set
# CONFIG_EPIC100 is not set
-# CONFIG_TLAN is not set
# CONFIG_ZNET is not set
# CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set
@@ -232,10 +210,6 @@
# CONFIG_COPS is not set
# CONFIG_IPDDP is not set
CONFIG_PPP=m
-
-#
-# CCP compressors for PPP are only built as modules.
-#
# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
# CONFIG_TR is not set
@@ -257,6 +231,31 @@
# CONFIG_CD_NO_IDESCSI is not set

#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+# CONFIG_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+# CONFIG_MOUSE is not set
+# CONFIG_UMISC is not set
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_APM is not set
+# CONFIG_WATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_VIDEO_DEV is not set
+CONFIG_NVRAM=y
+# CONFIG_JOYSTICK is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+
+#
# Filesystems
#
# CONFIG_QUOTA is not set
@@ -283,8 +282,8 @@
# CONFIG_ROMFS_FS is not set
CONFIG_AUTOFS_FS=y
# CONFIG_UFS_FS is not set
-# CONFIG_ADFS_FS is not set
CONFIG_DEVPTS_FS=y
+# CONFIG_ADFS_FS is not set
CONFIG_MAC_PARTITION=y
CONFIG_NLS=y

@@ -317,28 +316,3 @@
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_KOI8_R is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-# CONFIG_SOFTCURSOR is not set
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_MOUSE is not set
-# CONFIG_UMISC is not set
-# CONFIG_QIC02_TAPE is not set
-# CONFIG_APM is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_RTC is not set
-# CONFIG_VIDEO_DEV is not set
-CONFIG_NVRAM=y
-# CONFIG_JOYSTICK is not set
-# CONFIG_MISC_RADIO is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
diff -ur stock/linux-2.1.112/arch/sparc/config.in linux-2.1.112-smp/arch/sparc/config.in
--- stock/linux-2.1.112/arch/sparc/config.in Fri Jul 10 15:18:30 1998
+++ linux-2.1.112-smp/arch/sparc/config.in Thu Jul 30 19:01:01 1998
@@ -194,3 +194,4 @@
fi
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
endmenu
+
diff -ur stock/linux-2.1.112/drivers/char/Config.in linux-2.1.112-smp/drivers/char/Config.in
--- stock/linux-2.1.112/drivers/char/Config.in Fri Jul 24 11:10:17 1998
+++ linux-2.1.112-smp/drivers/char/Config.in Thu Jul 30 17:04:38 1998
@@ -40,6 +40,10 @@
fi
tristate 'Hayes ESP serial port support' CONFIG_ESPSERIAL
fi
+bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS
+if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
+ int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256
+fi
if [ "$CONFIG_PARPORT" != "n" ]; then
dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
if [ "$CONFIG_PRINTER" != "n" ]; then
diff -ur stock/linux-2.1.112/drivers/char/pty.c linux-2.1.112-smp/drivers/char/pty.c
--- stock/linux-2.1.112/drivers/char/pty.c Tue Apr 7 07:52:04 1998
+++ linux-2.1.112-smp/drivers/char/pty.c Thu Jul 30 18:09:43 1998
@@ -35,9 +35,9 @@
#define PTY_MAGIC 0x5001

static struct tty_driver pty_driver, pty_slave_driver;
-static struct tty_driver old_pty_driver, old_pty_slave_driver;
static int pty_refcount;

+/* Note: one set of tables for BSD and one for Unix98 */
static struct tty_struct *pty_table[NR_PTYS];
static struct termios *pty_termios[NR_PTYS];
static struct termios *pty_termios_locked[NR_PTYS];
@@ -46,6 +46,20 @@
static struct termios *ttyp_termios_locked[NR_PTYS];
static struct pty_struct pty_state[NR_PTYS];

+#ifdef CONFIG_UNIX98_PTYS
+/* These are global because they are accessed in tty_io.c */
+struct tty_driver ptm_driver[UNIX98_NR_MAJORS];
+struct tty_driver pts_driver[UNIX98_NR_MAJORS];
+
+static struct tty_struct *ptm_table[UNIX98_NR_MAJORS][NR_PTYS];
+static struct termios *ptm_termios[UNIX98_NR_MAJORS][NR_PTYS];
+static struct termios *ptm_termios_locked[UNIX98_NR_MAJORS][NR_PTYS];
+static struct tty_struct *pts_table[UNIX98_NR_MAJORS][NR_PTYS];
+static struct termios *pts_termios[UNIX98_NR_MAJORS][NR_PTYS];
+static struct termios *pts_termios_locked[UNIX98_NR_MAJORS][NR_PTYS];
+static struct pty_struct ptm_state[UNIX98_NR_MAJORS][NR_PTYS];
+#endif
+
#define MIN(a,b) ((a) < (b) ? (a) : (b))

static void pty_close(struct tty_struct * tty, struct file * filp)
@@ -267,7 +281,7 @@
line = MINOR(tty->device) - tty->driver.minor_start;
if ((line < 0) || (line >= NR_PTYS))
goto out;
- pty = pty_state + line;
+ pty = (struct pty_struct *)(tty->driver.driver_state) + line;
tty->driver_data = pty;

retval = -EIO;
@@ -294,6 +308,10 @@

__initfunc(int pty_init(void))
{
+ int i;
+
+ /* Traditional BSD devices */
+
memset(&pty_state, 0, sizeof(pty_state));
memset(&pty_driver, 0, sizeof(struct tty_driver));
pty_driver.magic = TTY_DRIVER_MAGIC;
@@ -314,6 +332,7 @@
pty_driver.table = pty_table;
pty_driver.termios = pty_termios;
pty_driver.termios_locked = pty_termios_locked;
+ pty_driver.driver_state = pty_state;
pty_driver.other = &pty_slave_driver;

pty_driver.open = pty_open;
@@ -337,37 +356,58 @@
pty_slave_driver.table = ttyp_table;
pty_slave_driver.termios = ttyp_termios;
pty_slave_driver.termios_locked = ttyp_termios_locked;
+ pty_slave_driver.driver_state = pty_state;
pty_slave_driver.other = &pty_driver;

- old_pty_driver = pty_driver;
- old_pty_driver.driver_name = "compat_pty_master";
- old_pty_driver.proc_entry = 0;
- old_pty_driver.major = TTY_MAJOR;
- old_pty_driver.minor_start = 128;
- old_pty_driver.num = (NR_PTYS > 64) ? 64 : NR_PTYS;
- old_pty_driver.other = &old_pty_slave_driver;
-
- old_pty_slave_driver = pty_slave_driver;
- old_pty_slave_driver.driver_name = "compat_pty_slave";
- old_pty_slave_driver.proc_entry = 0;
- old_pty_slave_driver.major = TTY_MAJOR;
- old_pty_slave_driver.minor_start = 192;
- old_pty_slave_driver.num = (NR_PTYS > 64) ? 64 : NR_PTYS;
- old_pty_slave_driver.other = &old_pty_driver;
+ if (tty_register_driver(&pty_driver))
+ panic("Couldn't register pty driver");
+ if (tty_register_driver(&pty_slave_driver))
+ panic("Couldn't register pty slave driver");

- /* only the master pty gets this ioctl (which is why we
+ /*
+ * only the master pty gets this ioctl (which is why we
* assign it here, instead of up with the rest of the
* pty_driver initialization. <cananian@alumni.princeton.edu>
*/
pty_driver.ioctl = pty_ioctl;

- if (tty_register_driver(&pty_driver))
- panic("Couldn't register pty driver");
- if (tty_register_driver(&pty_slave_driver))
- panic("Couldn't register pty slave driver");
- if (tty_register_driver(&old_pty_driver))
- panic("Couldn't register compat pty driver");
- if (tty_register_driver(&old_pty_slave_driver))
- panic("Couldn't register compat pty slave driver");
+ /* Unix98 devices */
+#ifdef CONFIG_UNIX98_PTYS
+ printk("pty: %d Unix98 ptys configured\n", UNIX98_NR_MAJORS*NR_PTYS);
+ for ( i = 0 ; i < UNIX98_NR_MAJORS ; i++ ) {
+ ptm_driver[i] = pty_driver;
+ ptm_driver[i].name = "ptm";
+ ptm_driver[i].proc_entry = 0;
+ ptm_driver[i].major = UNIX98_PTY_MASTER_MAJOR+i;
+ ptm_driver[i].minor_start = 0;
+ ptm_driver[i].num = NR_PTYS;
+ ptm_driver[i].other = &pts_driver[i];
+ ptm_driver[i].table = ptm_table[i];
+ ptm_driver[i].termios = ptm_termios[i];
+ ptm_driver[i].termios_locked = ptm_termios_locked[i];
+ ptm_driver[i].driver_state = ptm_state[i];
+
+ pts_driver[i] = pty_slave_driver;
+ pts_driver[i].name = "pts";
+ pts_driver[i].proc_entry = 0;
+ pts_driver[i].major = UNIX98_PTY_SLAVE_MAJOR+i;
+ pts_driver[i].minor_start = 0;
+ pts_driver[i].num = ptm_driver[i].num;
+ pts_driver[i].other = &ptm_driver[i];
+ pts_driver[i].table = pts_table[i];
+ pts_driver[i].termios = pts_termios[i];
+ pts_driver[i].termios_locked = pts_termios_locked[i];
+ pts_driver[i].driver_state = ptm_state[i];
+
+ ptm_driver[i].ioctl = pty_ioctl;
+
+ if (tty_register_driver(&ptm_driver[i]))
+ panic("Couldn't register Unix98 ptm driver major %d",
+ ptm_driver[i].major);
+ if (tty_register_driver(&pts_driver[i]))
+ panic("Couldn't register Unix98 pts driver major %d",
+ pts_driver[i].major);
+ }
+#endif
return 0;
}
diff -ur stock/linux-2.1.112/drivers/char/tty_io.c linux-2.1.112-smp/drivers/char/tty_io.c
--- stock/linux-2.1.112/drivers/char/tty_io.c Mon Jul 20 14:00:11 1998
+++ linux-2.1.112-smp/drivers/char/tty_io.c Thu Jul 30 15:29:52 1998
@@ -65,6 +65,7 @@
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/tty.h>
+#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/devpts_fs.h>
#include <linux/file.h>
@@ -107,6 +108,10 @@
struct tty_driver *tty_drivers = NULL; /* linked list of tty drivers */
struct tty_ldisc ldiscs[NR_LDISCS]; /* line disc dispatch table */

+#ifdef CONFIG_UNIX98_PTYS
+extern struct tty_driver ptm_driver[]; /* Unix98 pty masters; for /dev/ptmx */
+#endif
+
/*
* redirect is the pseudo-tty that console output
* is redirected to if asked by TIOCCONS.
@@ -1213,34 +1218,33 @@
device = c->device(c);
noctty = 1;
}
+#ifdef CONFIG_UNIX98_PTYS
if (device == PTMX_DEV) {
/* find a free pty. */
- struct tty_driver *driver = tty_drivers;
- int minor, line;
+ int major, minor, line;
+ struct tty_driver *driver;

- /* find the pty driver */
- for (driver=tty_drivers; driver; driver=driver->next)
- if (driver->major == PTY_MASTER_MAJOR)
- break;
- if (!driver) return -ENODEV;
-
- /* find a minor device that is not in use. */
- for (minor=driver->minor_start;
- minor<driver->minor_start+driver->num;
- minor++) {
- device = MKDEV(driver->major, minor);
- retval = init_dev(device, &tty);
- if (retval==0) break; /* success! */
+ /* find a device that is not in use. */
+ retval = -1;
+ for ( major = 0 ; major < UNIX98_NR_MAJORS ; major++ ) {
+ driver = &ptm_driver[major];
+ for (minor = driver->minor_start ;
+ minor < driver->minor_start + driver->num ;
+ minor++) {
+ device = MKDEV(driver->major, minor);
+ if (!init_dev(device, &tty)) goto ptmx_found; /* ok! */
+ }
}
- if (minor==driver->minor_start+driver->num) /* no success */
- return -EIO; /* no free ptys */
-
+ return -EIO; /* no free ptys */
+ ptmx_found:
set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
line = minor - driver->minor_start;
- devpts_pty_new(line, MKDEV(driver->other->major, line+driver->other->minor_start));
+ devpts_pty_new(line + major*NR_PTYS, MKDEV(driver->other->major,
+ line+driver->other->minor_start));
noctty = 1;
goto init_dev_done;
}
+#endif

retval = init_dev(device, &tty);
if (retval)
diff -ur stock/linux-2.1.112/fs/Config.in linux-2.1.112-smp/fs/Config.in
--- stock/linux-2.1.112/fs/Config.in Thu Jul 30 19:45:41 1998
+++ linux-2.1.112-smp/fs/Config.in Thu Jul 30 19:04:18 1998
@@ -72,9 +72,11 @@
bool 'SMD disklabel (Sun partition tables) support' CONFIG_SMD_DISKLABEL
bool 'Solaris (x86) partition table support' CONFIG_SOLARIS_X86_PARTITION
fi
+if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
+ tristate '/dev/pts filesystem for Unix98 PTYs' CONFIG_DEVPTS_FS
+fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'ADFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_ADFS_FS
- tristate '/dev/pts filesystem support (EXPERIMENTAL)' CONFIG_DEVPTS_FS
fi
bool 'Macintosh partition map support' CONFIG_MAC_PARTITION
endmenu
diff -ur stock/linux-2.1.112/fs/devpts/devpts_i.h linux-2.1.112-smp/fs/devpts/devpts_i.h
--- stock/linux-2.1.112/fs/devpts/devpts_i.h Sat Apr 4 09:45:15 1998
+++ linux-2.1.112-smp/fs/devpts/devpts_i.h Thu Jul 30 18:42:59 1998
@@ -27,7 +27,8 @@
gid_t gid;
umode_t mode;

- struct inode *inodes[NR_PTYS];
+ unsigned int max_ptys;
+ struct inode **inodes;
};

#define DEVPTS_SUPER_MAGIC 0x1cd1
diff -ur stock/linux-2.1.112/fs/devpts/inode.c linux-2.1.112-smp/fs/devpts/inode.c
--- stock/linux-2.1.112/fs/devpts/inode.c Sat Jun 13 13:25:12 1998
+++ linux-2.1.112-smp/fs/devpts/inode.c Thu Jul 30 18:10:33 1998
@@ -34,7 +34,7 @@
struct inode *inode;
int i;

- for ( i = 0 ; i < NR_PTYS ; i++ ) {
+ for ( i = 0 ; i < sbi->max_ptys ; i++ ) {
if ( (inode = sbi->inodes[i]) ) {
if ( inode->i_count != 1 )
printk("devpts_put_super: badness: entry %d count %d\n",
@@ -48,6 +48,7 @@
if ( sbi->next )
SBI(sbi->next)->back = sbi->back;

+ kfree(sbi->inodes);
kfree(sbi);

#ifdef MODULE
@@ -138,8 +139,14 @@
if ( !sbi )
goto fail_unlock;

- sbi->magic = DEVPTS_SBI_MAGIC;
- memset(sbi->inodes, 0, sizeof sbi->inodes);
+ sbi->magic = DEVPTS_SBI_MAGIC;
+ sbi->max_ptys = unix98_max_ptys;
+ sbi->inodes = kmalloc(sizeof(struct inode *) * sbi->max_ptys, GFP_KERNEL);
+ if ( !sbi->inodes ) {
+ kfree(sbi);
+ goto fail_unlock;
+ }
+ memset(sbi->inodes, 0, sizeof(struct inode *) * sbi->max_ptys);

s->u.generic_sbp = (void *) sbi;
s->s_blocksize = 1024;
@@ -252,6 +259,7 @@
static void devpts_read_inode(struct inode *inode)
{
ino_t ino = inode->i_ino;
+ struct devpts_sb_info *sbi = SBI(inode->i_sb);

inode->i_op = NULL;
inode->i_mode = 0;
@@ -270,7 +278,7 @@
}

ino -= 2;
- if ( ino >= NR_PTYS )
+ if ( ino >= sbi->max_ptys )
return; /* Bogus */

inode->i_mode = S_IFCHR;
diff -ur stock/linux-2.1.112/fs/devpts/root.c linux-2.1.112-smp/fs/devpts/root.c
--- stock/linux-2.1.112/fs/devpts/root.c Tue Apr 7 08:05:05 1998
+++ linux-2.1.112-smp/fs/devpts/root.c Thu Jul 30 16:56:46 1998
@@ -98,7 +98,7 @@
filp->f_pos = ++nr;
/* fall through */
default:
- while ( nr < NR_PTYS+2 ) {
+ while ( nr < sbi->max_ptys ) {
int ptynr = nr - 2;
if ( sbi->inodes[ptynr] ) {
genptsname(numbuf, ptynr);
diff -ur stock/linux-2.1.112/include/linux/devpts_fs.h linux-2.1.112-smp/include/linux/devpts_fs.h
--- stock/linux-2.1.112/include/linux/devpts_fs.h Sat Apr 4 09:45:19 1998
+++ linux-2.1.112-smp/include/linux/devpts_fs.h Thu Jul 30 18:30:26 1998
@@ -21,23 +21,28 @@

#include <linux/config.h>
#include <linux/kdev_t.h>
+#include <linux/tty.h>

#ifdef CONFIG_DEVPTS_FS

void devpts_pty_new(int, kdev_t);
void devpts_pty_kill(int);
+#define unix98_max_ptys = NR_PTYS * UNIX98_NR_MAJORS;

#elif defined(CONFIG_DEVPTS_FS_MODULE)

#ifdef BUILDING_PTY_C
void (*devpts_upcall_new)(int,kdev_t) = NULL;
void (*devpts_upcall_kill)(int) = NULL;
+unsigned int unix98_max_ptys = NR_PTYS * UNIX98_NR_MAJORS;

EXPORT_SYMBOL(devpts_upcall_new);
EXPORT_SYMBOL(devpts_upcall_kill);
+EXPORT_SYMBOL(unix98_max_ptys);
#else
extern void (*devpts_upcall_new)(int,kdev_t);
extern void (*devpts_upcall_kill)(int);
+extern unsigned int unix98_max_ptys;
#endif

#ifndef BUILDING_DEVPTS
diff -ur stock/linux-2.1.112/include/linux/major.h linux-2.1.112-smp/include/linux/major.h
--- stock/linux-2.1.112/include/linux/major.h Fri May 8 00:42:39 1998
+++ linux-2.1.112-smp/include/linux/major.h Thu Jul 30 19:47:52 1998
@@ -8,8 +8,12 @@

/* limits */

-#define MAX_CHRDEV 128
-#define MAX_BLKDEV 128
+/*
+ * Important: Don't change this to 256. Major number 255 is and must be
+ * reserved for future expansion into a larger dev_t space.
+ */
+#define MAX_CHRDEV 255
+#define MAX_BLKDEV 255

#define UNNAMED_MAJOR 0
#define MEM_MAJOR 1
@@ -79,6 +83,10 @@

#define SPECIALIX_NORMAL_MAJOR 75
#define SPECIALIX_CALLOUT_MAJOR 76
+
+#define UNIX98_PTY_MASTER_MAJOR 128
+#define UNIX98_PTY_MAJOR_COUNT 8
+#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)

/*
* Tests for SCSI devices.
Only in linux-2.1.112-smp/include/linux: major.h~
diff -ur stock/linux-2.1.112/include/linux/smp_lock.h linux-2.1.112-smp/include/linux/smp_lock.h
--- stock/linux-2.1.112/include/linux/smp_lock.h Thu Jul 30 19:45:41 1998
+++ linux-2.1.112-smp/include/linux/smp_lock.h Tue Jul 28 19:49:06 1998
@@ -50,7 +50,7 @@

lock_depth = tsk->lock_depth;
tsk->lock_depth = lock_depth+1;
- if (lock_depth)
+ if (!lock_depth)
spin_lock(&kernel_flag);
}

diff -ur stock/linux-2.1.112/include/linux/tty.h linux-2.1.112-smp/include/linux/tty.h
--- stock/linux-2.1.112/include/linux/tty.h Wed Jul 22 14:53:18 1998
+++ linux-2.1.112-smp/include/linux/tty.h Thu Jul 30 18:27:31 1998
@@ -16,7 +16,9 @@
consoles 16 and higher (since it returns a short) */

#ifdef __KERNEL__
+#include <linux/config.h>
#include <linux/fs.h>
+#include <linux/major.h>
#include <linux/termios.h>
#include <linux/tqueue.h>
#include <linux/tty_driver.h>
@@ -32,8 +34,24 @@
* (Note: the *_driver.minor_start values 1, 64, 128, 192 are
* hardcoded at present.)
*/
-#define NR_PTYS 256
+#define NR_PTYS 256 /* ptys/major */
#define NR_LDISCS 16
+
+/*
+ * Unix98 PTY's can be defined as any multiple of NR_PTYS up to
+ * UNIX98_PTY_MAJOR_COUNT; this section defines what we need from the
+ * config options
+ */
+#ifdef CONFIG_UNIX98_PTYS
+# define UNIX98_NR_MAJORS ((CONFIG_UNIX98_PTY_COUNT+NR_PTYS-1)/NR_PTYS)
+# if UNIX98_NR_MAJORS <= 0
+# undef CONFIG_UNIX98_PTYS
+# elif UNIX98_NR_MAJORS > UNIX98_PTY_MAJOR_COUNT
+# error Too many Unix98 ptys defined
+# undef UNIX98_NR_MAJORS
+# define UNIX98_NR_MAJORS UNIX98_PTY_MAJOR_COUNT
+# endif
+#endif

/*
* These are set up by the setup-routine at boot-time:
diff -ur stock/linux-2.1.112/include/linux/tty_driver.h linux-2.1.112-smp/include/linux/tty_driver.h
--- stock/linux-2.1.112/include/linux/tty_driver.h Wed Jul 22 14:53:18 1998
+++ linux-2.1.112-smp/include/linux/tty_driver.h Thu Jul 30 15:00:03 1998
@@ -139,6 +139,7 @@
struct tty_struct **table;
struct termios **termios;
struct termios **termios_locked;
+ void *driver_state; /* only used for the PTY driver */

/*
* Interface routines from the upper tty layer to the tty
--
PGP: 2047/2A960705 BA 03 D3 2C 14 A8 A8 BD 1E DF FE 69 EE 35 BD 74
See http://www.zytor.com/~hpa/ for web page and full PGP public key
I am Bahá'í -- ask me about it or see http://www.bahai.org/
"To love another person is to see the face of God." -- Les Misérables

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html

\
 
 \ /
  Last update: 2005-03-22 13:43    [W:0.057 / U:0.224 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site