int single_open_net(struct inode *inode, struct file *file, int (*show)(struct seq_file *, void *)) { int err; struct net *net; if (gr_proc_is_restricted()) return -EACCES; err = -ENXIO; net = get_proc_net(inode); if (net == NULL) goto err_net; err = single_open(file, show, net); if (err < 0) goto err_open; return 0; err_open: put_net(net); err_net: return err; }
int seq_open_net(struct inode *ino, struct file *f, const struct seq_operations *ops, int size) { struct net *net; struct seq_net_private *p; BUG_ON(size < sizeof(*p)); /* only permit access to /proc/net/dev */ if ( #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) ops != ipv6_seq_ops_addr && #endif ops != &dev_seq_ops && gr_proc_is_restricted()) return -EACCES; net = get_proc_net(ino); if (net == NULL) return -ENXIO; p = __seq_open_private(f, ops, size); if (p == NULL) { put_net(net); return -ENOMEM; } #ifdef CONFIG_NET_NS p->net = net; #endif return 0; }
static int sockstat_seq_open(struct inode *inode, struct file *file) { int err; struct net *net; err = -ENXIO; net = get_proc_net(inode); if (net == NULL) goto err_net; err = single_open(file, sockstat_seq_show, net); if (err < 0) goto err_open; return 0; err_open: put_net(net); err_net: return err; }
int seq_open_net(struct inode *ino, struct file *f, const struct seq_operations *ops, int size) { struct net *net; struct seq_net_private *p; BUG_ON(size < sizeof(*p)); net = get_proc_net(ino); if (net == NULL) return -ENXIO; p = __seq_open_private(f, ops, size); if (p == NULL) { put_net(net); return -ENOMEM; } #ifdef CONFIG_NET_NS p->net = net; #endif return 0; }