When less bytes than the header size is read, do not indicate to the caller
that the read was successful, as the caller would read uninitialized memory.
To achieve that, subtract the header size unconditionally (unless an error
was returned by sk_receive).

In addition, do not check for Ethernet type when full Ethernet header was
not read. This again may lead to reading of uninitialized memory.

Signed-off-by: Jiri Benc <jb...@redhat.com>
---
 raw.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/raw.c b/raw.c
index 1bfc1bbde509..795292fab358 100644
--- a/raw.c
+++ b/raw.c
@@ -244,6 +244,11 @@ static int raw_recv(struct transport *t, int fd, void 
*buf, int buflen,
 
        cnt = sk_receive(fd, ptr, buflen, hwts, 0);
 
+       if (cnt >= 0)
+               cnt -= hlen;
+       if (cnt < 0)
+               return cnt;
+
        if (raw->vlan) {
                if (ETH_P_1588 == ntohs(hdr->type)) {
                        pr_notice("raw: disabling VLAN mode");
@@ -255,9 +260,6 @@ static int raw_recv(struct transport *t, int fd, void *buf, 
int buflen,
                        raw->vlan = 1;
                }
        }
-       if (cnt >= hlen)  {
-               cnt -= hlen;
-       }
        return cnt;
 }
 
-- 
1.7.6.5


------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to