| | Date | Sat, 23 Oct 2010 13:40:24 +0200 | | From | Jiri Slaby <> | | Subject | Re: [PATCH 28/49] tty: Add a new file /proc/tty/consoles |
| |
On 10/22/2010 08:21 PM, Greg Kroah-Hartman wrote: > +/* > + * Used for open /proc/tty/consoles. Before this detect > + * the device ID of file descriptor 0 of the current > + * reading task if a character device... > + */ > +static int tty_consoles_open(struct inode *inode, struct file *file) > +{ > + struct files_struct *curfiles; > + > + current_dev = 0; > + curfiles = get_files_struct(current); > + if (curfiles) { > + const struct file *curfp; > + spin_lock(&curfiles->file_lock); > + curfp = fcheck_files(curfiles, 0); > + if (curfp && curfp->private_data) { > + const struct inode *inode; > + dget(curfp->f_dentry); > + inode = curfp->f_dentry->d_inode; > + if (S_ISCHR(inode->i_mode)) { > + struct tty_struct *tty; > + tty = (struct tty_struct *)curfp->private_data; > + if (tty && tty->magic == TTY_MAGIC) {
Ah, I've just understood what this code does. It seems, that the 'tty' at this point may be already freed (e.g. people don't set private_data to NULL). Please explain in the code why it can't...
Maybe I wouldn't bother with marking the "current" console by star at all as it seems not to pay off.
> + tty = tty_pair_get_tty(tty); > + current_dev = tty_devnum(tty); > + } > + } > + dput(curfp->f_dentry); > + } > + spin_unlock(&curfiles->file_lock); > + put_files_struct(curfiles); > + } > + return seq_open(file, &tty_consoles_op); > +}
regards, -- js suse labs
|