[PATCH] spufs: Fix oops when spufs module is not loaded
authorArnd Bergmann <arnd@arndb.de>
Tue, 6 Dec 2005 03:52:23 +0000 (22:52 -0500)
committerPaul Mackerras <paulus@samba.org>
Mon, 9 Jan 2006 03:52:48 +0000 (14:52 +1100)
try_module_get returns true when NULL arguments, so
we first need to check if there is a module loaded before
getting the reference count.

Signed-off-by: Arnd Bergmann <arndb@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/cell/spu_syscalls.c

index 43e0b187ffde38ab9a78300ef71b443bd020493c..91d564df944e0383d270e2ca10158cbd71ddc152 100644 (file)
@@ -37,11 +37,12 @@ asmlinkage long sys_spu_create(const char __user *name,
                unsigned int flags, mode_t mode)
 {
        long ret;
+       struct module *owner = spufs_calls.owner;
 
        ret = -ENOSYS;
-       if (try_module_get(spufs_calls.owner)) {
+       if (owner && try_module_get(spufs_calls.owner)) {
                ret = spufs_calls.create_thread(name, flags, mode);
-               module_put(spufs_calls.owner);
+               module_put(owner);
        }
        return ret;
 }
@@ -51,16 +52,17 @@ asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, __u32 __user *ustatus)
        long ret;
        struct file *filp;
        int fput_needed;
+       struct module *owner = spufs_calls.owner;
 
        ret = -ENOSYS;
-       if (try_module_get(spufs_calls.owner)) {
+       if (owner && try_module_get(owner)) {
                ret = -EBADF;
                filp = fget_light(fd, &fput_needed);
                if (filp) {
                        ret = spufs_calls.spu_run(filp, unpc, ustatus);
                        fput_light(filp, fput_needed);
                }
-               module_put(spufs_calls.owner);
+               module_put(owner);
        }
        return ret;
 }