[30309] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit: Fix 64-bit Windows socket write error handling

daemon@ATHENA.MIT.EDU (Greg Hudson)
Wed Oct 17 12:50:40 2018

Date: Wed, 17 Oct 2018 12:50:30 -0400
From: Greg Hudson <ghudson@mit.edu>
Message-Id: <201810171650.w9HGoUKv012876@drugstore.mit.edu>
To: cvs-krb5@mit.edu
Reply-To: krbdev@mit.edu
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/d98c3238894986765631f1e556f29ca817988816
commit d98c3238894986765631f1e556f29ca817988816
Author: Greg Hudson <ghudson@mit.edu>
Date:   Thu Oct 4 18:10:48 2018 -0400

    Fix 64-bit Windows socket write error handling
    
    Add casts to ensure that the result type of SOCKET_WRITEV() on Windows
    can represent -1.  Otherwise it will be treated as 2^32-1 when cast to
    ssize_t on 64-bit Windows, which can lead to crashes in
    krb5_sendto_kdc().  Reported by Puran Chand.
    
    ticket: 8746 (new)
    tags: pullup
    target_version: 1.13-next

 src/include/port-sockets.h  |    5 +++--
 src/lib/krb5/os/net_write.c |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/include/port-sockets.h b/src/include/port-sockets.h
index b3ab9c9..f0fc2b8 100644
--- a/src/include/port-sockets.h
+++ b/src/include/port-sockets.h
@@ -40,8 +40,9 @@ typedef WSABUF sg_buf;
  */
 /* WSASend returns 0 or SOCKET_ERROR.  */
 #define SOCKET_WRITEV_TEMP DWORD
-#define SOCKET_WRITEV(FD, SG, LEN, TMP)                         \
-    (WSASend((FD), (SG), (LEN), &(TMP), 0, 0, 0) ? -1 : (TMP))
+#define SOCKET_WRITEV(FD, SG, LEN, TMP)                 \
+    (WSASend((FD), (SG), (LEN), &(TMP), 0, 0, 0) ?      \
+     (ssize_t)-1 : (ssize_t)(TMP))
 
 #define SHUTDOWN_READ   SD_RECEIVE
 #define SHUTDOWN_WRITE  SD_SEND
diff --git a/src/lib/krb5/os/net_write.c b/src/lib/krb5/os/net_write.c
index 9290726..cc8c309 100644
--- a/src/lib/krb5/os/net_write.c
+++ b/src/lib/krb5/os/net_write.c
@@ -47,7 +47,7 @@ krb5_net_write(krb5_context context, int fd, const char *buf, int len)
 int
 krb5int_net_writev(krb5_context context, int fd, sg_buf *sgp, int nsg)
 {
-    int cc, len = 0;
+    ssize_t cc, len = 0;
     SOCKET_WRITEV_TEMP tmp;
 
     while (nsg > 0) {
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post