diff options
| -rw-r--r-- | MAINTAINERS | 4 | ||||
| -rw-r--r-- | drivers/pci/setup-res.c | 4 | ||||
| -rw-r--r-- | kernel/signal.c | 25 | 
3 files changed, 19 insertions, 14 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index d6befb2c470f..b1114cfac6bf 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4995,7 +4995,9 @@ T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git  S:	Maintained  TTY LAYER -S:	Orphan +M:	Greg Kroah-Hartman <gregkh@suse.de> +S:	Maintained +T:	quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/  F:	drivers/char/tty_*  F:	drivers/serial/serial_core.c  F:	include/linux/serial_core.h diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index b711fb7181e2..1898c7b47907 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -100,16 +100,16 @@ int pci_claim_resource(struct pci_dev *dev, int resource)  {  	struct resource *res = &dev->resource[resource];  	struct resource *root; -	char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";  	int err;  	root = pci_find_parent_resource(dev, res);  	err = -EINVAL;  	if (root != NULL) -		err = insert_resource(root, res); +		err = request_resource(root, res);  	if (err) { +		const char *dtype = resource < PCI_BRIDGE_RESOURCES ? "device" : "bridge";  		dev_err(&dev->dev, "BAR %d: %s of %s %pR\n",  			resource,  			root ? "address space collision on" : diff --git a/kernel/signal.c b/kernel/signal.c index ccf1ceedaebe..64c5deeaca5d 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2454,11 +2454,9 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s  	stack_t oss;  	int error; -	if (uoss) { -		oss.ss_sp = (void __user *) current->sas_ss_sp; -		oss.ss_size = current->sas_ss_size; -		oss.ss_flags = sas_ss_flags(sp); -	} +	oss.ss_sp = (void __user *) current->sas_ss_sp; +	oss.ss_size = current->sas_ss_size; +	oss.ss_flags = sas_ss_flags(sp);  	if (uss) {  		void __user *ss_sp; @@ -2466,10 +2464,12 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s  		int ss_flags;  		error = -EFAULT; -		if (!access_ok(VERIFY_READ, uss, sizeof(*uss)) -		    || __get_user(ss_sp, &uss->ss_sp) -		    || __get_user(ss_flags, &uss->ss_flags) -		    || __get_user(ss_size, &uss->ss_size)) +		if (!access_ok(VERIFY_READ, uss, sizeof(*uss))) +			goto out; +		error = __get_user(ss_sp, &uss->ss_sp) | +			__get_user(ss_flags, &uss->ss_flags) | +			__get_user(ss_size, &uss->ss_size); +		if (error)  			goto out;  		error = -EPERM; @@ -2501,13 +2501,16 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s  		current->sas_ss_size = ss_size;  	} +	error = 0;  	if (uoss) {  		error = -EFAULT; -		if (copy_to_user(uoss, &oss, sizeof(oss))) +		if (!access_ok(VERIFY_WRITE, uoss, sizeof(*uoss)))  			goto out; +		error = __put_user(oss.ss_sp, &uoss->ss_sp) | +			__put_user(oss.ss_size, &uoss->ss_size) | +			__put_user(oss.ss_flags, &uoss->ss_flags);  	} -	error = 0;  out:  	return error;  } | 
