浏览代码

[PATCH] orinoco: fix setting transmit key only

When determining whether there's a key to set or not, orinoco should be
looking at the key length, not the key data.  Otherwise confusion reigns
when trying to set TX key only, passing in zero-length key, but non-NULL
pointer.  Key length takes precedence over non-NULL key data.

Signed-off-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Dan Williams 19 年之前
父节点
当前提交
fe397d469f
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      drivers/net/wireless/orinoco.c

+ 2 - 2
drivers/net/wireless/orinoco.c

@@ -2875,7 +2875,7 @@ static int orinoco_ioctl_setiwencode(struct net_device *dev,
 	if (orinoco_lock(priv, &flags) != 0)
 	if (orinoco_lock(priv, &flags) != 0)
 		return -EBUSY;
 		return -EBUSY;
 
 
-	if (erq->pointer) {
+	if (erq->length > 0) {
 		if ((index < 0) || (index >= ORINOCO_MAX_KEYS))
 		if ((index < 0) || (index >= ORINOCO_MAX_KEYS))
 			index = priv->tx_key;
 			index = priv->tx_key;
 
 
@@ -2918,7 +2918,7 @@ static int orinoco_ioctl_setiwencode(struct net_device *dev,
 	if (erq->flags & IW_ENCODE_RESTRICTED)
 	if (erq->flags & IW_ENCODE_RESTRICTED)
 		restricted = 1;
 		restricted = 1;
 
 
-	if (erq->pointer) {
+	if (erq->pointer && erq->length > 0) {
 		priv->keys[index].len = cpu_to_le16(xlen);
 		priv->keys[index].len = cpu_to_le16(xlen);
 		memset(priv->keys[index].data, 0,
 		memset(priv->keys[index].data, 0,
 		       sizeof(priv->keys[index].data));
 		       sizeof(priv->keys[index].data));