Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b41305a3 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Paul Mackerras
Browse files

[PATCH] spufs: Fix oops when spufs module is not loaded



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: default avatarArnd Bergmann <arndb@de.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent d88cfffa
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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;
}