From: Pavel Emelyanov <xemul@openvz.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Paul Menage <menage@google.com>,
Sukadev Bhattiprolu <sukadev@us.ibm.com>,
Serge Hallyn <serue@us.ibm.com>
Subject: [PATCH 4/9] Make kobj_lookup() return the mapping's permissions
Date: Wed, 05 Mar 2008 20:34:27 +0300 [thread overview]
Message-ID: <47CED9A3.2050508@openvz.org> (raw)
In-Reply-To: <47CED717.60406@openvz.org>
The kobj_lookup() searches the kobject by its dev_t. Since this
mapping is going to be restricted with permissions, make the
kobj_lookup() return the mapping's permissions.
Currently the mode returned is unused.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
block/genhd.c | 4 ++--
drivers/base/map.c | 8 ++++++--
fs/block_dev.c | 3 ++-
fs/char_dev.c | 4 +++-
include/linux/genhd.h | 2 +-
include/linux/kobj_map.h | 2 +-
6 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/block/genhd.c b/block/genhd.c
index 9a7a903..1d1d0f2 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -210,12 +210,12 @@ void unlink_gendisk(struct gendisk *disk)
* This function gets the structure containing partitioning
* information for the given device @dev.
*/
-struct gendisk *get_gendisk(dev_t devt, int *part)
+struct gendisk *get_gendisk(dev_t devt, mode_t *mode, int *part)
{
struct kobject *kobj;
struct device *dev;
- kobj = kobj_lookup(bdev_map, devt, part);
+ kobj = kobj_lookup(bdev_map, devt, mode, part);
if (kobj == NULL)
return NULL;
diff --git a/drivers/base/map.c b/drivers/base/map.c
index c7e28a1..285a2d2 100644
--- a/drivers/base/map.c
+++ b/drivers/base/map.c
@@ -117,7 +117,8 @@ void kobj_unmap(struct kobj_map *domain, dev_t dev, unsigned long range)
kfree(found);
}
-struct kobject *kobj_lookup(struct kobj_map *domain, dev_t dev, int *index)
+struct kobject *kobj_lookup(struct kobj_map *domain, dev_t dev, mode_t *mode,
+ int *index)
{
struct kobject *kobj;
struct probe *p;
@@ -149,8 +150,11 @@ retry:
kobj = probe(dev, index, data);
/* Currently ->owner protects _only_ ->probe() itself. */
module_put(owner);
- if (kobj)
+ if (kobj) {
+ if (mode)
+ *mode = p->mode;
return kobj;
+ }
goto retry;
}
mutex_unlock(domain->lock);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index a0e9596..00dda91 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -934,11 +934,12 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part)
struct module *owner = NULL;
struct gendisk *disk;
int ret = -ENXIO;
+ mode_t mode;
int part;
file->f_mapping = bdev->bd_inode->i_mapping;
lock_kernel();
- disk = get_gendisk(bdev->bd_dev, &part);
+ disk = get_gendisk(bdev->bd_dev, &mode, &part);
if (!disk) {
unlock_kernel();
bdput(bdev);
diff --git a/fs/char_dev.c b/fs/char_dev.c
index 68e510b..dceb579 100644
--- a/fs/char_dev.c
+++ b/fs/char_dev.c
@@ -367,8 +367,10 @@ static int chrdev_open(struct inode *inode, struct file *filp)
if (!p) {
struct kobject *kobj;
int idx;
+ mode_t mode;
+
spin_unlock(&cdev_lock);
- kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx);
+ kobj = kobj_lookup(cdev_map, inode->i_rdev, &mode, &idx);
if (!kobj)
return -ENXIO;
new = container_of(kobj, struct cdev, kobj);
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 09a3b18..e09df44 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -371,7 +371,7 @@ extern int get_blkdev_list(char *, int);
extern void add_disk(struct gendisk *disk);
extern void del_gendisk(struct gendisk *gp);
extern void unlink_gendisk(struct gendisk *gp);
-extern struct gendisk *get_gendisk(dev_t dev, int *part);
+extern struct gendisk *get_gendisk(dev_t dev, mode_t *mode, int *part);
extern void set_device_ro(struct block_device *bdev, int flag);
extern void set_disk_ro(struct gendisk *disk, int flag);
diff --git a/include/linux/kobj_map.h b/include/linux/kobj_map.h
index bafe178..867f307 100644
--- a/include/linux/kobj_map.h
+++ b/include/linux/kobj_map.h
@@ -8,7 +8,7 @@ struct kobj_map;
int kobj_map(struct kobj_map *, dev_t, unsigned long, struct module *,
kobj_probe_t *, int (*)(dev_t, void *), void *);
void kobj_unmap(struct kobj_map *, dev_t, unsigned long);
-struct kobject *kobj_lookup(struct kobj_map *, dev_t, int *);
+struct kobject *kobj_lookup(struct kobj_map *, dev_t, mode_t *, int *);
struct kobj_map *kobj_map_init(kobj_probe_t *, struct mutex *);
#endif
--
1.5.3.4
next prev parent reply other threads:[~2008-03-05 17:35 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-05 17:23 [PATCH 0/9] Devices accessibility control group (v4) Pavel Emelyanov
2008-03-05 17:25 ` [PATCH 1/9] Avoid magic constants in drivers/base/map.c Pavel Emelyanov
2008-03-05 17:28 ` [PATCH 2/9] Cleanup the get_gendisk() a bit Pavel Emelyanov
2008-03-05 17:32 ` [PATCH 3/9] Add a mode on the struct probe Pavel Emelyanov
2008-03-05 17:34 ` Pavel Emelyanov [this message]
2008-03-05 17:37 ` [PATCH 5/9] Make use of permissions, returned by kobj_lookup Pavel Emelyanov
2008-03-06 1:13 ` Andrew Morton
2008-03-06 8:48 ` Pavel Emelyanov
2008-03-07 9:22 ` Pavel Emelyanov
2008-03-07 9:35 ` Andrew Morton
2008-03-07 9:52 ` Pavel Emelyanov
2008-03-07 15:59 ` Greg KH
2008-03-07 16:38 ` Pavel Emelyanov
2008-03-07 17:01 ` Greg KH
2008-03-07 17:08 ` Al Viro
2008-03-07 17:35 ` Serge E. Hallyn
2008-03-07 17:57 ` Casey Schaufler
2008-03-07 18:30 ` Serge E. Hallyn
2008-03-07 19:46 ` Stephen Smalley
2008-03-07 20:57 ` Casey Schaufler
2008-03-07 21:32 ` Serge E. Hallyn
2008-03-07 18:14 ` Greg KH
2008-03-07 18:50 ` Serge E. Hallyn
2008-03-08 6:04 ` Greg KH
2008-03-08 21:47 ` Serge E. Hallyn
2008-03-09 3:15 ` Greg KH
2008-03-10 20:35 ` Serge E. Hallyn
2008-03-11 9:57 ` Pavel Emelyanov
2008-03-11 17:36 ` Greg KH
2008-03-12 8:26 ` Pavel Emelyanov
2008-03-12 13:09 ` Serge E. Hallyn
2008-03-12 13:18 ` Stephen Smalley
2008-03-12 13:27 ` Stephen Smalley
2008-03-12 14:18 ` Serge E. Hallyn
2008-03-12 14:15 ` Serge E. Hallyn
2008-03-12 16:21 ` Casey Schaufler
2008-03-12 13:36 ` Pavel Emelyanov
2008-03-05 17:40 ` [PATCH 6/9] Extend the drivers/base/map.c functionality Pavel Emelyanov
2008-03-05 17:43 ` [PATCH 7/9] Provide functions to manipulate char device mappings Pavel Emelyanov
2008-03-05 17:46 ` [PATCH 8/9] Provide functions to manipulate block " Pavel Emelyanov
2008-03-05 17:47 ` [PATCH 9/9] Devices accessibility control group itself Pavel Emelyanov
2008-03-06 2:02 ` Greg KH
2008-03-06 1:55 ` [PATCH 0/9] Devices accessibility control group (v4) Greg KH
2008-03-06 3:15 ` Serge E. Hallyn
2008-03-06 4:34 ` Greg KH
2008-03-06 8:36 ` Pavel Emelyanov
2008-03-07 4:58 ` Greg KH
2008-03-07 8:42 ` Pavel Machek
2008-03-07 8:54 ` Pavel Emelyanov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47CED9A3.2050508@openvz.org \
--to=xemul@openvz.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=menage@google.com \
--cc=serue@us.ibm.com \
--cc=sukadev@us.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.