iio: accel: bma220: Use dev_get_drvdata() directly
[linux-2.6-microblaze.git] / fs / namei.c
index fde8fe0..e99e2a9 100644 (file)
@@ -2851,16 +2851,24 @@ static int may_open(const struct path *path, int acc_mode, int flag)
        case S_IFDIR:
                if (acc_mode & MAY_WRITE)
                        return -EISDIR;
+               if (acc_mode & MAY_EXEC)
+                       return -EACCES;
                break;
        case S_IFBLK:
        case S_IFCHR:
                if (!may_open_dev(path))
                        return -EACCES;
-               /*FALLTHRU*/
+               fallthrough;
        case S_IFIFO:
        case S_IFSOCK:
+               if (acc_mode & MAY_EXEC)
+                       return -EACCES;
                flag &= ~O_TRUNC;
                break;
+       case S_IFREG:
+               if ((acc_mode & MAY_EXEC) && path_noexec(path))
+                       return -EACCES;
+               break;
        }
 
        error = inode_permission(inode, MAY_OPEN | acc_mode);
@@ -3770,11 +3778,11 @@ exit2:
        mnt_drop_write(path.mnt);
 exit1:
        path_put(&path);
-       putname(name);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
                goto retry;
        }
+       putname(name);
        return error;
 }