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
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 20 Jan 2008 13:20:59 +0100
From:	Miklos Szeredi <miklos@...redi.hu>
To:	jengelh@...putergmbh.de
CC:	miklos@...redi.hu, akpm@...ux-foundation.org,
	linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
	util-linux-ng@...r.kernel.org, linuxram@...ibm.com,
	viro@....linux.org.uk, hch@...radead.org, a.p.zijlstra@...llo.nl
Subject: Re: [RFC][PATCH] VFS: create /proc/<pid>/mountinfo

> On Jan 19 2008 12:05, Miklos Szeredi wrote:
> >+
> >+/*
> >+ * Write full pathname from the root of the filesystem into the buffer.
> >+ */
> >+char *dentry_path(struct dentry *dentry, char *buf, int buflen)
> 
> Hm, this functions looks very much like __d_path(). Is it
> an unintentional copy?

It is similar, but there is a significant difference: __d_path() shows
the path relative to the current process's root (possibly crossing
mount points), while dentry_path() shows the path relative to the
_filesystem's_ root (ignoring mount points, and current root).

> >@@ -601,28 +635,29 @@ static inline void mangle(struct seq_fil
> > 	seq_escape(m, s, " \t\n\\");
> > }
> > 
> >+static struct proc_fs_info {
> 
> These do not seem to be static data. Please mark them as const.
> 
> static const struct proc_fs_info.

OK.

> >+	int flag;
> >+	char *str;
> 
> const char *str.

OK.

> >+	seq_putc(m, ' ');
> >+	seq_puts(m, sb->s_flags & MS_RDONLY ? "ro" : "rw");
> >+	for (fs_infop = fs_info; fs_infop->flag; fs_infop++) {
> >+		if (sb->s_flags & fs_infop->flag)
> >+			seq_puts(m, fs_infop->str);
> >+	}
> 
> {} could go.

The former is more readable, I think.  My rule is: surround anything
with {} if it's more than one line, even if not strictly necessary.
This is especially true for nested if/else statements, but makes sense
for 'for' as well.

> >+	if (sb->s_op->show_options)
> >+		err = sb->s_op->show_options(m, mnt);
> >+	if (IS_MNT_SHARED(mnt)) {
> >+		seq_printf(m, " shared:%i", get_peer_group_id(mnt));
> >+		if (IS_MNT_SLAVE(mnt))
> >+			seq_printf(m, ",slave:%i", get_master_id(mnt));
> >+	} else if (IS_MNT_SLAVE(mnt)) {
> >+		seq_printf(m, " slave:%i", get_master_id(mnt));
> >+	} else if (IS_MNT_UNBINDABLE(mnt)) {
> >+		seq_printf(m, " unbindable");
> >+	} else {
> >+		seq_printf(m, " private");
> >+	}
> >+	seq_putc(m, '\n');
> >+	return err;
> >+}
> >+
> >+struct seq_operations mountinfo_op = {
> I think this can go const.

OK

> >--- linux.orig/include/linux/mount.h	2008-01-18 19:21:38.000000000 +0100
> >+++ linux/include/linux/mount.h	2008-01-18 23:39:35.000000000 +0100
> >@@ -56,6 +56,7 @@ struct vfsmount {
> > 	struct list_head mnt_slave;	/* slave list entry */
> > 	struct vfsmount *mnt_master;	/* slave is on master->mnt_slave_list */
> > 	struct mnt_namespace *mnt_ns;	/* containing namespace */
> >+	int mnt_id;			/* mount identifier */
> > 	/*
> > 	 * We put mnt_count & mnt_expiry_mark at the end of struct vfsmount
> > 	 * to let these frequently modified fields in a separate cache line
> 
> Should/could it be unsigned int, or does it need to store -1?

IDA returns int, so why change it?  Going over 2^31 number of mounts
doesn't seem likely in the near future.

Thanks,
Miklos
--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ