[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH -V3 2/7] virtio-9p: Rearrange fileop structures
From: |
Venkateswararao Jujjuri (JV) |
Subject: |
Re: [Qemu-devel] [PATCH -V3 2/7] virtio-9p: Rearrange fileop structures |
Date: |
Wed, 26 May 2010 13:21:09 -0700 |
User-agent: |
Thunderbird 2.0.0.24 (Windows/20100228) |
Sripathi Kodi wrote:
> On Fri, 21 May 2010 14:26:05 -0700
> "Venkateswararao Jujjuri (JV)" <address@hidden> wrote:
>
> Hi JV,
>
> While I agree that this patch is nice to have, why is this part of the
> security model patchset? Is it required to implement the models?
Initially I had a grand plan of making this a substitute for file-op.h.
But later file-op.h got added and this left mostly for consolidation and
segregation.
Not really a 'must' for security..but makes code cleaner.
Thanks,
JV
>
> Thanks,
> Sripathi.
>
>> Signed-off-by: Venkateswararao Jujjuri <address@hidden>
>> ---
>> hw/virtio-9p.c | 185
>> ++++++++++++++------------------------------------------
>> hw/virtio-9p.h | 92 ++++++++++++++++++++++++++++
>> 2 files changed, 138 insertions(+), 139 deletions(-)
>>
>> diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c
>> index 8ecd39c..fda3c4a 100644
>> --- a/hw/virtio-9p.c
>> +++ b/hw/virtio-9p.c
>> @@ -21,6 +21,52 @@
>> int dotu = 1;
>> int debug_9p_pdu;
>>
>> +enum {
>> + Oread = 0x00,
>> + Owrite = 0x01,
>> + Ordwr = 0x02,
>> + Oexec = 0x03,
>> + Oexcl = 0x04,
>> + Otrunc = 0x10,
>> + Orexec = 0x20,
>> + Orclose = 0x40,
>> + Oappend = 0x80,
>> +};
>> +
>> +static int omode_to_uflags(int8_t mode)
>> +{
>> + int ret = 0;
>> +
>> + switch (mode & 3) {
>> + case Oread:
>> + ret = O_RDONLY;
>> + break;
>> + case Ordwr:
>> + ret = O_RDWR;
>> + break;
>> + case Owrite:
>> + ret = O_WRONLY;
>> + break;
>> + case Oexec:
>> + ret = O_RDONLY;
>> + break;
>> + }
>> +
>> + if (mode & Otrunc) {
>> + ret |= O_TRUNC;
>> + }
>> +
>> + if (mode & Oappend) {
>> + ret |= O_APPEND;
>> + }
>> +
>> + if (mode & Oexcl) {
>> + ret |= O_EXCL;
>> + }
>> +
>> + return ret;
>> +}
>> +
>> static int v9fs_do_lstat(V9fsState *s, V9fsString *path, struct stat *stbuf)
>> {
>> return s->ops->lstat(&s->ctx, path->data, stbuf);
>> @@ -999,14 +1045,6 @@ out:
>> v9fs_string_free(&aname);
>> }
>>
>> -typedef struct V9fsStatState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - V9fsStat v9stat;
>> - V9fsFidState *fidp;
>> - struct stat stbuf;
>> -} V9fsStatState;
>> -
>> static void v9fs_stat_post_lstat(V9fsState *s, V9fsStatState *vs, int err)
>> {
>> if (err == -1) {
>> @@ -1057,19 +1095,6 @@ out:
>> qemu_free(vs);
>> }
>>
>> -typedef struct V9fsWalkState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - int16_t nwnames;
>> - int name_idx;
>> - V9fsQID *qids;
>> - V9fsFidState *fidp;
>> - V9fsFidState *newfidp;
>> - V9fsString path;
>> - V9fsString *wnames;
>> - struct stat stbuf;
>> -} V9fsWalkState;
>> -
>> static void v9fs_walk_complete(V9fsState *s, V9fsWalkState *vs, int err)
>> {
>> complete_pdu(s, vs->pdu, err);
>> @@ -1233,62 +1258,6 @@ out:
>> v9fs_walk_complete(s, vs, err);
>> }
>>
>> -typedef struct V9fsOpenState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - int8_t mode;
>> - V9fsFidState *fidp;
>> - V9fsQID qid;
>> - struct stat stbuf;
>> -
>> -} V9fsOpenState;
>> -
>> -enum {
>> - Oread = 0x00,
>> - Owrite = 0x01,
>> - Ordwr = 0x02,
>> - Oexec = 0x03,
>> - Oexcl = 0x04,
>> - Otrunc = 0x10,
>> - Orexec = 0x20,
>> - Orclose = 0x40,
>> - Oappend = 0x80,
>> -};
>> -
>> -static int omode_to_uflags(int8_t mode)
>> -{
>> - int ret = 0;
>> -
>> - switch (mode & 3) {
>> - case Oread:
>> - ret = O_RDONLY;
>> - break;
>> - case Ordwr:
>> - ret = O_RDWR;
>> - break;
>> - case Owrite:
>> - ret = O_WRONLY;
>> - break;
>> - case Oexec:
>> - ret = O_RDONLY;
>> - break;
>> - }
>> -
>> - if (mode & Otrunc) {
>> - ret |= O_TRUNC;
>> - }
>> -
>> - if (mode & Oappend) {
>> - ret |= O_APPEND;
>> - }
>> -
>> - if (mode & Oexcl) {
>> - ret |= O_EXCL;
>> - }
>> -
>> - return ret;
>> -}
>> -
>> static void v9fs_open_post_opendir(V9fsState *s, V9fsOpenState *vs, int err)
>> {
>> if (vs->fidp->dir == NULL) {
>> @@ -1391,25 +1360,6 @@ out:
>> complete_pdu(s, pdu, err);
>> }
>>
>> -typedef struct V9fsReadState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - int32_t count;
>> - int32_t total;
>> - int64_t off;
>> - V9fsFidState *fidp;
>> - struct iovec iov[128]; /* FIXME: bad, bad, bad */
>> - struct iovec *sg;
>> - off_t dir_pos;
>> - struct dirent *dent;
>> - struct stat stbuf;
>> - V9fsString name;
>> - V9fsStat v9stat;
>> - int32_t len;
>> - int32_t cnt;
>> - int32_t max_count;
>> -} V9fsReadState;
>> -
>> static void v9fs_read_post_readdir(V9fsState *, V9fsReadState *, ssize_t);
>>
>> static void v9fs_read_post_seekdir(V9fsState *s, V9fsReadState *vs, ssize_t
>> err)
>> @@ -1597,19 +1547,6 @@ out:
>> qemu_free(vs);
>> }
>>
>> -typedef struct V9fsWriteState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - int32_t len;
>> - int32_t count;
>> - int32_t total;
>> - int64_t off;
>> - V9fsFidState *fidp;
>> - struct iovec iov[128]; /* FIXME: bad, bad, bad */
>> - struct iovec *sg;
>> - int cnt;
>> -} V9fsWriteState;
>> -
>> static void v9fs_write_post_writev(V9fsState *s, V9fsWriteState *vs,
>> ssize_t err)
>> {
>> @@ -1706,19 +1643,6 @@ out:
>> qemu_free(vs);
>> }
>>
>> -typedef struct V9fsCreateState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - V9fsFidState *fidp;
>> - V9fsQID qid;
>> - int32_t perm;
>> - int8_t mode;
>> - struct stat stbuf;
>> - V9fsString name;
>> - V9fsString extension;
>> - V9fsString fullname;
>> -} V9fsCreateState;
>> -
>> static void v9fs_post_create(V9fsState *s, V9fsCreateState *vs, int err)
>> {
>> if (err == 0) {
>> @@ -1938,12 +1862,6 @@ static void v9fs_flush(V9fsState *s, V9fsPDU *pdu)
>> complete_pdu(s, pdu, 7);
>> }
>>
>> -typedef struct V9fsRemoveState {
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - V9fsFidState *fidp;
>> -} V9fsRemoveState;
>> -
>> static void v9fs_remove_post_remove(V9fsState *s, V9fsRemoveState *vs,
>> int err)
>> {
>> @@ -1986,17 +1904,6 @@ out:
>> qemu_free(vs);
>> }
>>
>> -typedef struct V9fsWstatState
>> -{
>> - V9fsPDU *pdu;
>> - size_t offset;
>> - int16_t unused;
>> - V9fsStat v9stat;
>> - V9fsFidState *fidp;
>> - struct stat stbuf;
>> - V9fsString nname;
>> -} V9fsWstatState;
>> -
>> static void v9fs_wstat_post_truncate(V9fsState *s, V9fsWstatState *vs, int
>> err)
>> {
>> if (err < 0) {
>> diff --git a/hw/virtio-9p.h b/hw/virtio-9p.h
>> index 9b6cbde..992c765 100644
>> --- a/hw/virtio-9p.h
>> +++ b/hw/virtio-9p.h
>> @@ -154,6 +154,98 @@ typedef struct V9fsState
>> enum p9_proto_version proto_version;
>> } V9fsState;
>>
>> +typedef struct V9fsCreateState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + V9fsFidState *fidp;
>> + V9fsQID qid;
>> + int32_t perm;
>> + int8_t mode;
>> + struct stat stbuf;
>> + V9fsString name;
>> + V9fsString extension;
>> + V9fsString fullname;
>> +} V9fsCreateState;
>> +
>> +typedef struct V9fsStatState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + V9fsStat v9stat;
>> + V9fsFidState *fidp;
>> + struct stat stbuf;
>> +} V9fsStatState;
>> +
>> +typedef struct V9fsWalkState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + int16_t nwnames;
>> + int name_idx;
>> + V9fsQID *qids;
>> + V9fsFidState *fidp;
>> + V9fsFidState *newfidp;
>> + V9fsString path;
>> + V9fsString *wnames;
>> + struct stat stbuf;
>> +} V9fsWalkState;
>> +
>> +typedef struct V9fsOpenState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + int8_t mode;
>> + V9fsFidState *fidp;
>> + V9fsQID qid;
>> + struct stat stbuf;
>> +} V9fsOpenState;
>> +
>> +typedef struct V9fsReadState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + int32_t count;
>> + int32_t total;
>> + int64_t off;
>> + V9fsFidState *fidp;
>> + struct iovec iov[128]; /* FIXME: bad, bad, bad */
>> + struct iovec *sg;
>> + off_t dir_pos;
>> + struct dirent *dent;
>> + struct stat stbuf;
>> + V9fsString name;
>> + V9fsStat v9stat;
>> + int32_t len;
>> + int32_t cnt;
>> + int32_t max_count;
>> +} V9fsReadState;
>> +
>> +typedef struct V9fsWriteState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + int32_t len;
>> + int32_t count;
>> + int32_t total;
>> + int64_t off;
>> + V9fsFidState *fidp;
>> + struct iovec iov[128]; /* FIXME: bad, bad, bad */
>> + struct iovec *sg;
>> + int cnt;
>> +} V9fsWriteState;
>> +
>> +typedef struct V9fsRemoveState {
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + V9fsFidState *fidp;
>> +} V9fsRemoveState;
>> +
>> +typedef struct V9fsWstatState
>> +{
>> + V9fsPDU *pdu;
>> + size_t offset;
>> + int16_t unused;
>> + V9fsStat v9stat;
>> + V9fsFidState *fidp;
>> + struct stat stbuf;
>> + V9fsString nname;
>> +} V9fsWstatState;
>> +
>> struct virtio_9p_config
>> {
>> /* number of characters in tag */
>> --
>> 1.6.5.2
>>
>>
>
- [Qemu-devel] [PATCH-V2 7/7] virtio-9p: Implemented security model for chown and chgrp., (continued)
- [Qemu-devel] [PATCH-V2 7/7] virtio-9p: Implemented security model for chown and chgrp., Venkateswararao Jujjuri (JV), 2010/05/11
- [Qemu-devel] [PATCH-V2 0/7] virtio-9p:Introducing security model for VirtFS, Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 4/7] virtio-9p: Implement Security model for mknod related files, Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 5/7] virtio-9p: Implemented security model for symlink and link., Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 7/7] virtio-9p: Implemented security model for chown and chgrp., Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 1/7] virtio-9p: Introduces an option to specify the security model., Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 2/7] virtio-9p: Rearrange fileop structures, Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 6/7] virtio-9p: Implemented Security model for lstat and fstat, Venkateswararao Jujjuri (JV), 2010/05/21
- [Qemu-devel] [PATCH -V3 3/7] virtio-9p: modify create/open2 and mkdir for new security model., Venkateswararao Jujjuri (JV), 2010/05/21