From 6eb563a490a3a524f4aa852bfe9fc630a9f7b233 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Wed, 23 Apr 2003 10:31:25 -0700 Subject: [PATCH] [BRIDGE]: Missing unlocks in ioctl error paths. --- net/bridge/br_ioctl.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c index df44d0671cfc0..7eda6d33c2848 100644 --- a/net/bridge/br_ioctl.c +++ b/net/bridge/br_ioctl.c @@ -138,8 +138,10 @@ static int br_ioctl_device(struct net_bridge *br, struct net_bridge_port *pt; read_lock(&br->lock); - if ((pt = br_get_port(br, arg1)) == NULL) + if ((pt = br_get_port(br, arg1)) == NULL) { + read_unlock(&br->lock); return -EINVAL; + } memset(&p, 0, sizeof(struct __port_info)); memcpy(&p.designated_root, &pt->designated_root, 8); @@ -176,25 +178,29 @@ static int br_ioctl_device(struct net_bridge *br, case BRCTL_SET_PORT_PRIORITY: { struct net_bridge_port *p; + int ret = 0; write_lock(&br->lock); - if ((p = br_get_port(br, arg0)) == NULL) - return -EINVAL; - br_stp_set_port_priority(p, arg1); + if ((p = br_get_port(br, arg0)) == NULL) + ret = -EINVAL; + else + br_stp_set_port_priority(p, arg1); write_unlock(&br->lock); - return 0; + return ret; } case BRCTL_SET_PATH_COST: { struct net_bridge_port *p; + int ret = 0; write_lock(&br->lock); if ((p = br_get_port(br, arg0)) == NULL) - return -EINVAL; - br_stp_set_path_cost(p, arg1); + ret = -EINVAL; + else + br_stp_set_path_cost(p, arg1); write_unlock(&br->lock); - return 0; + return ret; } case BRCTL_GET_FDB_ENTRIES: -- 2.53.0