Sripathi Kodi wrote:
> On Fri, 21 May 2010 14:26:05 -0700
> "Venkateswararao Jujjuri (JV)" <jv...@linux.vnet.ibm.com> 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 <jv...@linux.vnet.ibm.com>
>> ---
>>  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
>>
>>
> 



Reply via email to