diff options
Diffstat (limited to 'sys/net')
| -rw-r--r-- | sys/net/altq/altq_cbq.c | 2 | ||||
| -rw-r--r-- | sys/net/altq/altq_fairq.c | 2 | ||||
| -rw-r--r-- | sys/net/altq/altq_priq.c | 2 | ||||
| -rw-r--r-- | sys/net/if.c | 34 | ||||
| -rw-r--r-- | sys/net/if_var.h | 8 | ||||
| -rw-r--r-- | sys/net/pfvar.h | 4 | 
6 files changed, 40 insertions, 12 deletions
| diff --git a/sys/net/altq/altq_cbq.c b/sys/net/altq/altq_cbq.c index fdf39690160b..2333b9ea8678 100644 --- a/sys/net/altq/altq_cbq.c +++ b/sys/net/altq/altq_cbq.c @@ -173,6 +173,8 @@ cbq_request(struct ifaltq *ifq, int req, void *arg)  static void  get_class_stats(class_stats_t *statsp, struct rm_class *cl)  { +	memset(statsp, 0, sizeof(*statsp)); +  	statsp->xmit_cnt	= cl->stats_.xmit_cnt;  	statsp->drop_cnt	= cl->stats_.drop_cnt;  	statsp->over		= cl->stats_.over; diff --git a/sys/net/altq/altq_fairq.c b/sys/net/altq/altq_fairq.c index 6069865101a0..0a00168e547e 100644 --- a/sys/net/altq/altq_fairq.c +++ b/sys/net/altq/altq_fairq.c @@ -857,6 +857,8 @@ get_class_stats(struct fairq_classstats *sp, struct fairq_class *cl)  {  	fairq_bucket_t *b; +	memset(sp, 0, sizeof(*sp)); +  	sp->class_handle = cl->cl_handle;  	sp->qlimit = cl->cl_qlimit;  	sp->xmit_cnt = cl->cl_xmitcnt; diff --git a/sys/net/altq/altq_priq.c b/sys/net/altq/altq_priq.c index 026346639b2e..fec488418546 100644 --- a/sys/net/altq/altq_priq.c +++ b/sys/net/altq/altq_priq.c @@ -597,6 +597,8 @@ priq_purgeq(struct priq_class *cl)  static void  get_class_stats(struct priq_classstats *sp, struct priq_class *cl)  { +	memset(sp, 0, sizeof(*sp)); +  	sp->class_handle = cl->cl_handle;  	sp->qlength = qlen(cl->cl_q);  	sp->qlimit = qlimit(cl->cl_q); diff --git a/sys/net/if.c b/sys/net/if.c index b6a798aa0fab..cb9c47c14c32 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -2842,15 +2842,20 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)  		break;  	case SIOCAIFGROUP: +	{ +		const char *groupname; +  		error = priv_check(td, PRIV_NET_ADDIFGROUP);  		if (error)  			return (error); -		error = if_addgroup(ifp, -		    ((struct ifgroupreq *)data)->ifgr_group); +		groupname = ((struct ifgroupreq *)data)->ifgr_group; +		if (strnlen(groupname, IFNAMSIZ) == IFNAMSIZ) +			return (EINVAL); +		error = if_addgroup(ifp, groupname);  		if (error != 0)  			return (error);  		break; - +	}  	case SIOCGIFGROUP:  	{  		struct epoch_tracker et; @@ -2862,15 +2867,20 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)  	}  	case SIOCDIFGROUP: +	{ +		const char *groupname; +  		error = priv_check(td, PRIV_NET_DELIFGROUP);  		if (error)  			return (error); -		error = if_delgroup(ifp, -		    ((struct ifgroupreq *)data)->ifgr_group); +		groupname = ((struct ifgroupreq *)data)->ifgr_group; +		if (strnlen(groupname, IFNAMSIZ) == IFNAMSIZ) +			return (EINVAL); +		error = if_delgroup(ifp, groupname);  		if (error != 0)  			return (error);  		break; - +	}  	default:  		error = ENOIOCTL;  		break; @@ -3014,9 +3024,17 @@ ifioctl(struct socket *so, u_long cmd, caddr_t data, struct thread *td)  		goto out_noref;  	case SIOCGIFGMEMB: -		error = if_getgroupmembers((struct ifgroupreq *)data); -		goto out_noref; +	{ +		struct ifgroupreq *req; +		req = (struct ifgroupreq *)data; +		if (strnlen(req->ifgr_name, IFNAMSIZ) == IFNAMSIZ) { +			error = EINVAL; +			goto out_noref; +		} +		error = if_getgroupmembers(req); +		goto out_noref; +	}  #if defined(INET) || defined(INET6)  	case SIOCSVH:  	case SIOCGVH: diff --git a/sys/net/if_var.h b/sys/net/if_var.h index f2df612b19c1..961259bb0ca1 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -383,18 +383,18 @@ struct ifg_group {  	char				 ifg_group[IFNAMSIZ];  	u_int				 ifg_refcnt;  	void				*ifg_pf_kif; -	CK_STAILQ_HEAD(, ifg_member)	 ifg_members; /* (CK_) */ -	CK_STAILQ_ENTRY(ifg_group)		 ifg_next; /* (CK_) */ +	CK_STAILQ_HEAD(, ifg_member)	 ifg_members; +	CK_STAILQ_ENTRY(ifg_group)	 ifg_next;  };  struct ifg_member { -	CK_STAILQ_ENTRY(ifg_member)	 ifgm_next; /* (CK_) */ +	CK_STAILQ_ENTRY(ifg_member)	 ifgm_next;  	if_t				 ifgm_ifp;  };  struct ifg_list {  	struct ifg_group	*ifgl_group; -	CK_STAILQ_ENTRY(ifg_list)	 ifgl_next; /* (CK_) */ +	CK_STAILQ_ENTRY(ifg_list)	 ifgl_next;  };  #ifdef _SYS_EVENTHANDLER_H_ diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h index 8aefe514946e..52db00f6ce0b 100644 --- a/sys/net/pfvar.h +++ b/sys/net/pfvar.h @@ -2435,6 +2435,7 @@ extern struct pf_ksrc_node	*pf_find_src_node(struct pf_addr *,  				    struct pf_srchash **, pf_sn_types_t, bool);  extern void			 pf_unlink_src_node(struct pf_ksrc_node *);  extern u_int			 pf_free_src_nodes(struct pf_ksrc_node_list *); +extern void			 pf_free_src_node(struct pf_ksrc_node *);  extern void			 pf_print_state(struct pf_kstate *);  extern void			 pf_print_flags(uint16_t);  extern int			 pf_addr_wrap_neq(struct pf_addr_wrap *, @@ -2521,6 +2522,9 @@ uint16_t	pf_qname2qid(const char *, bool);  void	pfr_initialize(void);  void	pfr_cleanup(void); +struct pfr_kentry * +	pfr_kentry_byaddr(struct pfr_ktable *, struct pf_addr *, sa_family_t, +	    int);  int	pfr_match_addr(struct pfr_ktable *, struct pf_addr *, sa_family_t);  void	pfr_update_stats(struct pfr_ktable *, struct pf_addr *, sa_family_t,  	    u_int64_t, int, int, int); | 
