NFSv4/pnfs: Fix an infinite layoutget loop
[linux-2.6-microblaze.git] / fs / binfmt_flat.c
index a1e6860..475d083 100644 (file)
@@ -176,41 +176,32 @@ static int create_flat_tables(struct linux_binprm *bprm, unsigned long arg_start
 #define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */
 #define RESERVED     0xC0 /* bit 6,7:   reserved */
 
-static int decompress_exec(
-       struct linux_binprm *bprm,
-       unsigned long offset,
-       char *dst,
-       long len,
-       int fd)
+static int decompress_exec(struct linux_binprm *bprm, loff_t fpos, char *dst,
+               long len, int fd)
 {
        unsigned char *buf;
        z_stream strm;
-       loff_t fpos;
        int ret, retval;
 
-       pr_debug("decompress_exec(offset=%lx,buf=%p,len=%lx)\n", offset, dst, len);
+       pr_debug("decompress_exec(offset=%llx,buf=%p,len=%lx)\n", fpos, dst, len);
 
        memset(&strm, 0, sizeof(strm));
        strm.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
-       if (strm.workspace == NULL) {
-               pr_debug("no memory for decompress workspace\n");
+       if (!strm.workspace)
                return -ENOMEM;
-       }
+
        buf = kmalloc(LBUFSIZE, GFP_KERNEL);
-       if (buf == NULL) {
-               pr_debug("no memory for read buffer\n");
+       if (!buf) {
                retval = -ENOMEM;
                goto out_free;
        }
 
        /* Read in first chunk of data and parse gzip header. */
-       fpos = offset;
-       ret = kernel_read(bprm->file, offset, buf, LBUFSIZE);
+       ret = kernel_read(bprm->file, buf, LBUFSIZE, &fpos);
 
        strm.next_in = buf;
        strm.avail_in = ret;
        strm.total_in = 0;
-       fpos += ret;
 
        retval = -ENOEXEC;
 
@@ -276,7 +267,7 @@ static int decompress_exec(
        }
 
        while ((ret = zlib_inflate(&strm, Z_NO_FLUSH)) == Z_OK) {
-               ret = kernel_read(bprm->file, fpos, buf, LBUFSIZE);
+               ret = kernel_read(bprm->file, buf, LBUFSIZE, &fpos);
                if (ret <= 0)
                        break;
                len -= ret;
@@ -284,7 +275,6 @@ static int decompress_exec(
                strm.next_in = buf;
                strm.avail_in = ret;
                strm.total_in = 0;
-               fpos += ret;
        }
 
        if (ret < 0) {
@@ -890,7 +880,7 @@ static int load_flat_shared_library(int id, struct lib_info *libs)
         * as we're past the point of no return and are dealing with shared
         * libraries.
         */
-       bprm.cred_prepared = 1;
+       bprm.called_set_creds = 1;
 
        res = prepare_binprm(&bprm);