opnsense-src/sys/compat/linux
Ed Schouten 0eee862a54 Don't make Linux stat() open character devices to resolve its name.
The existing code calls kern_open() to resolve the vnode of a pathname
right after a stat(). This is not correct, because it causes random
character devices to be opened in /dev. This means ls'ing a tape
streamer will cause it to rewind, for example. Changes I have made:

- Add kern_statat_vnhook() to allow binary emulators to `post-process'
  struct stat, using the proper vnode.

- Remove unneeded printf's from stat() and statfs().

- Make the Linuxolator use kern_statat_vnhook(), replacing
  translate_path_major_minor_at().

- Let translate_fd_major_minor() use vp->v_rdev instead of
  vp->v_un.vu_cdev.

Result:

	crw-rw-rw- 1 root root   0, 14 Feb 20 13:54 /dev/ptmx
	crw--w---- 1 root adm  136,  0 Feb 20 14:03 /dev/pts/0
	crw--w---- 1 root adm  136,  1 Feb 20 14:02 /dev/pts/1
	crw--w---- 1 ed   tty  136,  2 Feb 20 14:03 /dev/pts/2

Before this commit, ptmx also had a major number of 136, because it
silently allocated and deallocated a pseudo-terminal. Device nodes that
cannot be opened now have proper major/minor-numbers.

Reviewed by:	kib, netchild, rdivacky (thanks!)
2009-02-20 13:05:29 +00:00
..
linux_emul.c The code in linux_proc_exit() contains a race when multiple linux based 2008-10-31 10:38:30 +00:00
linux_emul.h Implement robust futexes. Most of the code is modelled after 2008-05-13 20:01:27 +00:00
linux_file.c Use shared vnode locks when invoking VOP_READDIR(). 2009-02-13 18:18:14 +00:00
linux_file.h Implement the linux syscalls 2008-04-08 09:45:49 +00:00
linux_futex.c In the robust futexes list head, futex_offset shall be signed, 2008-11-16 15:45:41 +00:00
linux_futex.h Make robust futexes work on linux32/amd64. Use PTRIN to read 2008-10-14 07:59:23 +00:00
linux_getcwd.c Use shared vnode locks when invoking VOP_READDIR(). 2009-02-13 18:18:14 +00:00
linux_ioctl.c Rather than using hidden includes (with cicular dependencies), 2008-12-02 21:37:28 +00:00
linux_ioctl.h Add TIOCPKT and TIOCSPTLCK to the Linuxolator. 2008-07-23 17:47:44 +00:00
linux_ipc.c Document that all the other commands are either 2008-11-26 16:38:43 +00:00
linux_ipc.h MFP4 (110956): 2006-12-21 13:11:06 +00:00
linux_mib.c Switch to emulating Linux 2.6 on default. 2008-06-03 17:50:13 +00:00
linux_mib.h MFp4 (111746+): 2006-12-31 12:39:10 +00:00
linux_misc.c Push down Giant inside sysctl. Also add some more assertions to the code. 2008-12-29 12:58:45 +00:00
linux_misc.h Sanitize arguments to linux_mremap(). 2008-02-22 11:47:56 +00:00
linux_signal.c Correctly fill siginfo for the signals delivered by linux tkill/tgkill. 2008-10-19 10:02:26 +00:00
linux_signal.h Correctly fill siginfo for the signals delivered by linux tkill/tgkill. 2008-10-19 10:02:26 +00:00
linux_socket.c Rather than using hidden includes (with cicular dependencies), 2008-12-02 21:37:28 +00:00
linux_socket.h Make linux_sendmsg() and linux_recvmsg() work on linux32/amd64. 2008-11-29 17:14:06 +00:00
linux_stats.c Don't make Linux stat() open character devices to resolve its name. 2009-02-20 13:05:29 +00:00
linux_sysctl.c Unbreak COMPAT_LINUX32 option support on amd64. 2006-03-19 11:10:33 +00:00
linux_sysproto.h Handle unimplemented syscall by instantly returning ENOSYS instead of sending 2005-03-07 00:18:06 +00:00
linux_time.c MFP4: 109655 2006-12-20 20:17:35 +00:00
linux_uid16.c Add the support for the AT_FDCWD and fd-relative name lookups to the 2008-03-31 12:01:21 +00:00
linux_util.c Retire the MALLOC and FREE macros. They are an abomination unto style(9). 2008-10-23 15:53:51 +00:00
linux_util.h Implement the linux syscalls 2008-04-08 09:45:49 +00:00