X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Ftux%2Fdirectory.c;h=03c5474f1672750ddd70c98c715f0e5d1619bdbb;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=714800e7bafd2063d43f827db512ab6f0fe6f656;hpb=cee37fe97739d85991964371c1f3a745c00dd236;p=linux-2.6.git diff --git a/net/tux/directory.c b/net/tux/directory.c index 714800e7b..03c5474f1 100644 --- a/net/tux/directory.c +++ b/net/tux/directory.c @@ -80,7 +80,7 @@ static void do_dir_line (tux_req_t *req, int cachemiss) char string0[MAX_OBJECTNAME_LEN+200], *tmp; int len, curroff, total, str_len = 0; int err, flag = cachemiss ? 0 : LOOKUP_ATOMIC; - struct nameidata base; + struct nameidata base = { }; struct dentry *dentry = NULL; struct inode *inode = NULL; struct vfsmount *mnt = NULL; @@ -210,6 +210,7 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, struct linux_dirent64 * dirent, d; struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf; int reclen = ROUND_UP64(NAME_OFFSET(dirent) + namlen + 1); + int err; buf->error = -EINVAL; /* only used if we fail.. */ if (reclen > buf->count) @@ -217,7 +218,8 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, dirent = buf->previous; if (dirent) { d.d_off = offset; - copy_to_user(&dirent->d_off, &d.d_off, sizeof(d.d_off)); + err = copy_to_user(&dirent->d_off, &d.d_off, sizeof(d.d_off)); + BUG_ON(err); } dirent = buf->current_dir; buf->previous = dirent; @@ -225,9 +227,12 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, d.d_ino = ino; d.d_reclen = reclen; d.d_type = d_type; - copy_to_user(dirent, &d, NAME_OFFSET(&d)); - copy_to_user(dirent->d_name, name, namlen); - put_user(0, dirent->d_name + namlen); + err = copy_to_user(dirent, &d, NAME_OFFSET(&d)); + BUG_ON(err); + err = copy_to_user(dirent->d_name, name, namlen); + BUG_ON(err); + err = put_user(0, dirent->d_name + namlen); + BUG_ON(err); dirent = (void *)dirent + reclen; buf->current_dir = dirent; buf->count -= reclen; @@ -261,7 +266,7 @@ void list_directory (tux_req_t *req, int cachemiss) oldmm = get_fs(); set_fs(KERNEL_DS); set_fs(KERNEL_DS); - total = vfs_readdir(&req->in_file, filldir64, &buf); + total = vfs_readdir(req->in_file, filldir64, &buf); set_fs(oldmm); if (buf.previous) @@ -278,7 +283,7 @@ void list_directory (tux_req_t *req, int cachemiss) } if (!total) { kfree(dirp0); - req->in_file.f_pos = 0; + req->in_file->f_pos = 0; add_req_to_workqueue(req); return; }