From: Nishanth Aravamudan <nacc@us.ibm.com>
To: Josip Loncaric <josip@lanl.gov>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH] net/sunrpc: fix time conversion error
Date: Mon, 1 Aug 2005 15:56:43 -0700 [thread overview]
Message-ID: <20050801225643.GA4285@us.ibm.com> (raw)
In-Reply-To: <42EE9014.7080205@lanl.gov>
On 01.08.2005 [15:11:48 -0600], Josip Loncaric wrote:
> Line 589 of linux-2.6.11.10/net/sunrpc/svcsock.c is obviously wrong:
>
> skb->stamp.tv_usec = xtime.tv_nsec * 1000;
>
> To convert nsec to usec, one should divide instead of multiplying:
>
> skb->stamp.tv_usec = xtime.tv_nsec / 1000;
>
> The same bug could be present in the latest kernels, although I haven't
> checked. This bug makes svc_udp_recvfrom() timestamps incorrect.
Agreed, the conversion is wrong. I think the code is buggy period, as it
accesses xtime without grabbing the xtime_lock first. Following patch
should fix both issues.
Description: This function incorrectly multiplies a nanosecond value by
1000, instead of dividing by 1000, to obtain a corresponding microsecond
value. Fix the math. Also, the function incorrectly accesses xtime
without using the xtime_lock. Fixed as well. Patch is compile-tested.
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
---
svcsock.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
--- 2.6.13-rc4/net/sunrpc/svcsock.c 2005-07-29 14:11:50.000000000 -0700
+++ 2.6.13-rc4-dev/net/sunrpc/svcsock.c 2005-08-01 15:51:11.000000000 -0700
@@ -559,6 +559,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
struct svc_serv *serv = svsk->sk_server;
struct sk_buff *skb;
int err, len;
+ unsigned long seq;
if (test_and_clear_bit(SK_CHNGBUF, &svsk->sk_flags))
/* udp sockets need large rcvbuf as all pending
@@ -585,8 +586,11 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
dprintk("svc: recvfrom returned error %d\n", -err);
}
if (skb->stamp.tv_sec == 0) {
- skb->stamp.tv_sec = xtime.tv_sec;
- skb->stamp.tv_usec = xtime.tv_nsec * 1000;
+ do {
+ seq = read_seqbegin(&xtime_lock);
+ skb->stamp.tv_sec = xtime.tv_sec;
+ skb->stamp.tv_usec = xtime.tv_nsec / 1000;
+ } while (read_seqretry(&xtime_lock, seq));
/* Don't enable netstamp, sunrpc doesn't
need that much accuracy */
}
next prev parent reply other threads:[~2005-08-01 22:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-01 21:11 Time conversion error in linux-2.6.11.10/net/sunrpoc/svcsock.c Josip Loncaric
2005-08-01 22:56 ` Nishanth Aravamudan [this message]
2005-08-02 0:03 ` [PATCH] net/sunrpc: fix time conversion error Patrick McHardy
2005-08-02 0:11 ` Nishanth Aravamudan
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=20050801225643.GA4285@us.ibm.com \
--to=nacc@us.ibm.com \
--cc=josip@lanl.gov \
--cc=linux-kernel@vger.kernel.org \
--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