lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 24 Aug 2006 21:04:26 +0900 From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com> To: LKML <linux-kernel@...r.kernel.org> Cc: ebiederm@...ssion.com, kamezawa.hiroyu@...fujitsu.com, Andrew Morton <akpm@...l.org>, saito.tadashi@...t.fujitsu.com, ak@...e.de Subject: [RFC][PATCH] ps command race fix take 3 [4/4] proc_root_open/releae/llseek implements open/release/llseek ops are needed by new proc_pid_readdir() llseek()'s offset is specified by 'bytes' but /proc root doesn't handle file->f_pos as bytes. So I disabled llseek for /proc for now. Signed-Off-By: KAMEZAWA Hiroyuki <kamezawa.hiroyu@...fujitsu.com> fs/proc/root.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+) Index: linux-2.6.18-rc4/fs/proc/root.c =================================================================== --- linux-2.6.18-rc4.orig/fs/proc/root.c +++ linux-2.6.18-rc4/fs/proc/root.c @@ -16,6 +16,7 @@ #include <linux/module.h> #include <linux/bitops.h> #include <linux/smp_lock.h> +#include <linux/watch_head.h> #include "internal.h" @@ -118,14 +119,46 @@ static int proc_root_readdir(struct file return ret; } +static int proc_root_open(struct inode *inode, struct file *filp) +{ + struct watch_head *wh; + wh = kzalloc(sizeof(*wh), GFP_KERNEL); + if (wh) { + filp->private_data = wh; + return 0; + } + return -ENOMEM; +} + +static int proc_root_release(struct inode *inode, struct file *filp) +{ + struct watch_head *wh; + wh = filp->private_data; + rcu_read_lock(); + wh_get_and_remove_watcher(wh); + rcu_read_unlock(); + kfree(wh); + filp->private_data = NULL; + return 0; +} + +static loff_t proc_root_llseek(struct file *file, loff_t off, int pos) +{ + /* pos is bytes...but we don't use fp->f_pos as bytes... */ + return -ENOTSUPP; +} + /* * The root /proc directory is special, as it has the * <pid> directories. Thus we don't use the generic * directory handling functions for that.. */ static struct file_operations proc_root_operations = { + .open = proc_root_open, .read = generic_read_dir, .readdir = proc_root_readdir, + .release = proc_root_release, + .llseek = proc_root_llseek, }; /* - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists