From patchwork Tue Jan 23 19:19:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serhey Popovych X-Patchwork-Id: 864964 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VZe076eW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zQymN5s5hz9s9Y for ; Wed, 24 Jan 2018 06:19:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752101AbeAWTTq (ORCPT ); Tue, 23 Jan 2018 14:19:46 -0500 Received: from mail-lf0-f65.google.com ([209.85.215.65]:37444 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751998AbeAWTTk (ORCPT ); Tue, 23 Jan 2018 14:19:40 -0500 Received: by mail-lf0-f65.google.com with SMTP id f3so2025665lfe.4 for ; Tue, 23 Jan 2018 11:19:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=luc2dI5KHzG815PHsWbwxYKoA7v5/v2TvBBn08mPtmk=; b=VZe076eW8bvWdMrGvEAW7QHq0reWjFWO6bAfybXVhIcVAtHloohiJgG40vbaxbsRBo w9lAyGhYO+meGIjGJuC1bV0umqZ6dj8EwTT34FiZ3p84oKscppZsMQlx8xa6xN7QGXdi 2QwCpquTpHxr0itFC4cYc+7AhLFqdiXF+phrUPnf5W/rQ3FJH1usbce1dGw871HLqu+F cwxIXZikSRE/taQDiBY8tvqn/mfjcqEK9lxdj3TC/EsNiAv+Za0AYGI/oUVSNtNCVGDC yATPjqzBq9LTyFXEVcCkuhNpnYjZlvJzjnexdH8Wi+pJPXVqZMvL97rUbimXMAf/Gd1w 554A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=luc2dI5KHzG815PHsWbwxYKoA7v5/v2TvBBn08mPtmk=; b=sJgFMRyKw3Dn8TAtzWNSU1bWW5br62OoQJQZifPUJfHW/MDL1ZaohLNBCVDo0FPSdW OAb3+hjLwvEZ5n5Leczmj6jQTPYZcIkvlGmZ0+UJ35HM7RmNZNed7Crb2QozFw8qDCfs t03pNCaO9mZQaBKmEHfXmX0unzQO00ef68kUYvCFCaoGkdp6BMVc3Ry/0Xt0U/Yzf4y6 wRP5wftQYieAlTTGHfsMmb21bMAi1cEUPYeJ+CBeYNcxy3RuDLFf61OmgG5zxdHxPqBP gNy7u8ZYyNm3F9cFEY0ysDOm41o2ovfWY5911eWWmbX1OkgIKhHL6Nq8455xnCkRQNnY JyjA== X-Gm-Message-State: AKwxytcjprTiqt7CRR/0TTi3x+bAVzKZdziLjqHf8T+IMVGUOa7KehP8 6FGnk837ReMkD8IbMCa2TsN3hA== X-Google-Smtp-Source: AH8x225YpA2dUZs9kCq4Sgh7wJqdE/+lUKoG1DvEkNxlPnHDmqrQRyRoZRYobzu23xZunvatwKX5SA== X-Received: by 10.46.64.7 with SMTP id n7mr1713891lja.9.1516735179304; Tue, 23 Jan 2018 11:19:39 -0800 (PST) Received: from tuxracer.localdomain ([2a01:6d80::195:20:96:53]) by smtp.gmail.com with ESMTPSA id u87sm162394lfk.8.2018.01.23.11.19.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 23 Jan 2018 11:19:38 -0800 (PST) From: Serhey Popovych To: netdev@vger.kernel.org Subject: [PATCH iproute2-next v2 3/8] iprule: Use inet_addr_match_rta() Date: Tue, 23 Jan 2018 21:19:25 +0200 Message-Id: <1516735170-20921-4-git-send-email-serhe.popovych@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1516735170-20921-1-git-send-email-serhe.popovych@gmail.com> References: <1516735170-20921-1-git-send-email-serhe.popovych@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org While there check return from get_prefix() for filter address. Signed-off-by: Serhey Popovych --- ip/iprule.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/ip/iprule.c b/ip/iprule.c index 96695d8..a3abf2f 100644 --- a/ip/iprule.c +++ b/ip/iprule.c @@ -76,8 +76,6 @@ static struct static bool filter_nlmsg(struct nlmsghdr *n, struct rtattr **tb, int host_len) { struct rtmsg *r = NLMSG_DATA(n); - inet_prefix src = { .family = r->rtm_family }; - inet_prefix dst = { .family = r->rtm_family }; __u32 table; if (preferred_family != AF_UNSPEC && r->rtm_family != preferred_family) @@ -90,24 +88,24 @@ static bool filter_nlmsg(struct nlmsghdr *n, struct rtattr **tb, int host_len) return false; if (filter.src.family) { - if (tb[FRA_SRC]) { - memcpy(&src.data, RTA_DATA(tb[FRA_SRC]), - (r->rtm_src_len + 7) / 8); - } - if (filter.src.family != r->rtm_family || - filter.src.bitlen > r->rtm_src_len || - inet_addr_match(&src, &filter.src, filter.src.bitlen)) + inet_prefix *f_src = &filter.src; + + if (f_src->family != r->rtm_family || + f_src->bitlen > r->rtm_src_len) + return false; + + if (inet_addr_match_rta(f_src, tb[FRA_SRC])) return false; } if (filter.dst.family) { - if (tb[FRA_DST]) { - memcpy(&dst.data, RTA_DATA(tb[FRA_DST]), - (r->rtm_dst_len + 7) / 8); - } - if (filter.dst.family != r->rtm_family || - filter.dst.bitlen > r->rtm_dst_len || - inet_addr_match(&dst, &filter.dst, filter.dst.bitlen)) + inet_prefix *f_dst = &filter.dst; + + if (f_dst->family != r->rtm_family || + f_dst->bitlen > r->rtm_dst_len) + return false; + + if (inet_addr_match_rta(f_dst, tb[FRA_DST])) return false; } @@ -500,13 +498,15 @@ static int iprule_list_flush_or_save(int argc, char **argv, int action) } else if (matches(*argv, "from") == 0 || matches(*argv, "src") == 0) { NEXT_ARG(); - get_prefix(&filter.src, *argv, af); + if (get_prefix(&filter.src, *argv, af)) + invarg("from value is invalid\n", *argv); } else { if (matches(*argv, "dst") == 0 || matches(*argv, "to") == 0) { NEXT_ARG(); } - get_prefix(&filter.dst, *argv, af); + if (get_prefix(&filter.dst, *argv, af)) + invarg("to value is invalid\n", *argv); } argc--; argv++; }