From: Michal Schmidt <mschmidt@redhat.com>
To: netdev@vger.kernel.org
Cc: Yuval Mintz <Yuval.Mintz@cavium.com>,
Ariel Elior <ariel.elior@cavium.com>
Subject: [PATCH net 1/7] bnx2x: prevent crash when accessing PTP with interface down
Date: Fri, 3 Mar 2017 17:08:28 +0100 [thread overview]
Message-ID: <20170303160834.4125-2-mschmidt@redhat.com> (raw)
In-Reply-To: <20170303160834.4125-1-mschmidt@redhat.com>
It is possible to crash the kernel by accessing a PTP device while its
associated bnx2x interface is down. Before the interface is brought up,
the timecounter is not initialized, so accessing it results in NULL
dereference.
Fix it by checking if the interface is up.
Use -ENETDOWN as the error code when the interface is down.
-EFAULT in bnx2x_ptp_adjfreq() did not seem right.
Tested using phc_ctl get/set/adj/freq commands.
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
---
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index d8d06fdfc4..d57290b9ea 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -13738,7 +13738,7 @@ static int bnx2x_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
if (!netif_running(bp->dev)) {
DP(BNX2X_MSG_PTP,
"PTP adjfreq called while the interface is down\n");
- return -EFAULT;
+ return -ENETDOWN;
}
if (ppb < 0) {
@@ -13797,6 +13797,12 @@ static int bnx2x_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
{
struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
+ if (!netif_running(bp->dev)) {
+ DP(BNX2X_MSG_PTP,
+ "PTP adjtime called while the interface is down\n");
+ return -ENETDOWN;
+ }
+
DP(BNX2X_MSG_PTP, "PTP adjtime called, delta = %llx\n", delta);
timecounter_adjtime(&bp->timecounter, delta);
@@ -13809,6 +13815,12 @@ static int bnx2x_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
u64 ns;
+ if (!netif_running(bp->dev)) {
+ DP(BNX2X_MSG_PTP,
+ "PTP gettime called while the interface is down\n");
+ return -ENETDOWN;
+ }
+
ns = timecounter_read(&bp->timecounter);
DP(BNX2X_MSG_PTP, "PTP gettime called, ns = %llu\n", ns);
@@ -13824,6 +13836,12 @@ static int bnx2x_ptp_settime(struct ptp_clock_info *ptp,
struct bnx2x *bp = container_of(ptp, struct bnx2x, ptp_clock_info);
u64 ns;
+ if (!netif_running(bp->dev)) {
+ DP(BNX2X_MSG_PTP,
+ "PTP settime called while the interface is down\n");
+ return -ENETDOWN;
+ }
+
ns = timespec64_to_ns(ts);
DP(BNX2X_MSG_PTP, "PTP settime called, ns = %llu\n", ns);
--
2.9.3
next prev parent reply other threads:[~2017-03-03 16:08 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-03 16:08 [PATCH net 0/7] bnx2x: PTP crash, VF VLAN fixes Michal Schmidt
2017-03-03 16:08 ` Michal Schmidt [this message]
2017-03-05 9:43 ` [PATCH net 1/7] bnx2x: prevent crash when accessing PTP with interface down Mintz, Yuval
2017-03-06 14:04 ` Michal Schmidt
2017-03-03 16:08 ` [PATCH net 2/7] bnx2x: lower verbosity of VF stats debug messages Michal Schmidt
2017-03-03 16:08 ` [PATCH net 3/7] bnx2x: fix possible overrun of VFPF multicast addresses array Michal Schmidt
2017-03-05 9:55 ` Mintz, Yuval
2017-03-06 14:45 ` [PATCH net 3/7 v2] " Michal Schmidt
2017-03-07 15:54 ` Mintz, Yuval
2017-03-03 16:08 ` [PATCH net 4/7] bnx2x: fix detection of VLAN filtering feature for VF Michal Schmidt
2017-03-03 16:08 ` [PATCH net 5/7] bnx2x: do not rollback VF MAC/VLAN filters we did not configure Michal Schmidt
2017-03-05 10:13 ` Mintz, Yuval
2017-03-06 14:05 ` Michal Schmidt
2017-03-03 16:08 ` [PATCH net 6/7] bnx2x: fix incorrect filter count in an error message Michal Schmidt
2017-03-03 16:08 ` [PATCH net 7/7] bnx2x: add missing configuration of VF VLAN filters Michal Schmidt
2017-03-05 10:17 ` [PATCH net 0/7] bnx2x: PTP crash, VF VLAN fixes Mintz, Yuval
2017-03-07 21:53 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170303160834.4125-2-mschmidt@redhat.com \
--to=mschmidt@redhat.com \
--cc=Yuval.Mintz@cavium.com \
--cc=ariel.elior@cavium.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).