aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-09-26 13:09:39 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-26 13:09:39 -0400
commitd8f654ef6a55495e548427b997a388e0d5a1ffb4 (patch)
tree31ee0a2aeccf23aeda562932d8d7c37a55a8653c /net
parent052a0cf6f85a136dc0654ec3c2d25ddd4495c65d (diff)
parent99c4a6344f6574c97019ac16e8d54bfe5ad21f2d (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: at91_can: Forgotten git 'add' of at91_can.c TI Davinci EMAC: Fix in vector definition for EMAC_VERSION_2 ax25: Fix ax25_cb refcounting in ax25_ctl_ioctl virtio_net: Check for room in the vq before adding buffer virtio_net: avoid (most) NETDEV_TX_BUSY by stopping queue early. virtio_net: formalize skb_vnet_hdr virtio_net: don't free buffers in xmit ring virtio_net: return NETDEV_TX_BUSY instead of queueing an extra skb. virtio_net: skb_orphan() and nf_reset() in xmit path.
Diffstat (limited to 'net')
-rw-r--r--net/ax25/af_ax25.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
index d6b1b054e29..fbcac76fdc0 100644
--- a/net/ax25/af_ax25.c
+++ b/net/ax25/af_ax25.c
@@ -358,6 +358,7 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
358 ax25_dev *ax25_dev; 358 ax25_dev *ax25_dev;
359 ax25_cb *ax25; 359 ax25_cb *ax25;
360 unsigned int k; 360 unsigned int k;
361 int ret = 0;
361 362
362 if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl))) 363 if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
363 return -EFAULT; 364 return -EFAULT;
@@ -388,57 +389,63 @@ static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
388 case AX25_WINDOW: 389 case AX25_WINDOW:
389 if (ax25->modulus == AX25_MODULUS) { 390 if (ax25->modulus == AX25_MODULUS) {
390 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7) 391 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
391 return -EINVAL; 392 goto einval_put;
392 } else { 393 } else {
393 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63) 394 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
394 return -EINVAL; 395 goto einval_put;
395 } 396 }
396 ax25->window = ax25_ctl.arg; 397 ax25->window = ax25_ctl.arg;
397 break; 398 break;
398 399
399 case AX25_T1: 400 case AX25_T1:
400 if (ax25_ctl.arg < 1) 401 if (ax25_ctl.arg < 1)
401 return -EINVAL; 402 goto einval_put;
402 ax25->rtt = (ax25_ctl.arg * HZ) / 2; 403 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
403 ax25->t1 = ax25_ctl.arg * HZ; 404 ax25->t1 = ax25_ctl.arg * HZ;
404 break; 405 break;
405 406
406 case AX25_T2: 407 case AX25_T2:
407 if (ax25_ctl.arg < 1) 408 if (ax25_ctl.arg < 1)
408 return -EINVAL; 409 goto einval_put;
409 ax25->t2 = ax25_ctl.arg * HZ; 410 ax25->t2 = ax25_ctl.arg * HZ;
410 break; 411 break;
411 412
412 case AX25_N2: 413 case AX25_N2:
413 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31) 414 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
414 return -EINVAL; 415 goto einval_put;
415 ax25->n2count = 0; 416 ax25->n2count = 0;
416 ax25->n2 = ax25_ctl.arg; 417 ax25->n2 = ax25_ctl.arg;
417 break; 418 break;
418 419
419 case AX25_T3: 420 case AX25_T3:
420 if (ax25_ctl.arg < 0) 421 if (ax25_ctl.arg < 0)
421 return -EINVAL; 422 goto einval_put;
422 ax25->t3 = ax25_ctl.arg * HZ; 423 ax25->t3 = ax25_ctl.arg * HZ;
423 break; 424 break;
424 425
425 case AX25_IDLE: 426 case AX25_IDLE:
426 if (ax25_ctl.arg < 0) 427 if (ax25_ctl.arg < 0)
427 return -EINVAL; 428 goto einval_put;
428 ax25->idle = ax25_ctl.arg * 60 * HZ; 429 ax25->idle = ax25_ctl.arg * 60 * HZ;
429 break; 430 break;
430 431
431 case AX25_PACLEN: 432 case AX25_PACLEN:
432 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535) 433 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
433 return -EINVAL; 434 goto einval_put;
434 ax25->paclen = ax25_ctl.arg; 435 ax25->paclen = ax25_ctl.arg;
435 break; 436 break;
436 437
437 default: 438 default:
438 return -EINVAL; 439 goto einval_put;
439 } 440 }
440 441
441 return 0; 442out_put:
443 ax25_cb_put(ax25);
444 return ret;
445
446einval_put:
447 ret = -EINVAL;
448 goto out_put;
442} 449}
443 450
444static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev) 451static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)