pull up r19196 from trunk
authorTom Yu <tlyu@mit.edu>
Thu, 29 Mar 2007 21:36:38 +0000 (21:36 +0000)
committerTom Yu <tlyu@mit.edu>
Thu, 29 Mar 2007 21:36:38 +0000 (21:36 +0000)
 r19196@cathode-dark-space:  raeburn | 2007-02-28 21:19:41 -0500
 ticket: new
 target_version: 1.6.1
 tags: pullup
 subject: valgrind detects uninitialized (but really unused) bytes in 'queue'

 The gsstest program exports a GSSAPI security context to a blob in
 memory, writes that memory to a file, and reads it back to use it.
 Under valgrind, the writing phase triggers a warning about
 uninitialized storage.

 The "queue" structure as implemented in generic/util_ordering.c holds
 an array of values, some of which may never be initialized.  As far as
 I can tell, those uninitialized values are never used before being
 initialized, either, but valgrind doesn't know that.

 This patch zaps the structure contents (including the array) before
 using the queue object.

ticket: 5455
version_fixed: 1.6.1

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-6@19310 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/gssapi/generic/util_ordering.c

index f7cf666789ef234669dad6de089fa810b4c914f4..218462bb0ce32abf8db936e5ceb5c23dc299cb09 100644 (file)
@@ -96,6 +96,12 @@ g_order_init(void **vqueue, gssint_uint64 seqnum,
    if ((q = (queue *) malloc(sizeof(queue))) == NULL)
       return(ENOMEM);
 
+   /* This stops valgrind from complaining about writing uninitialized
+      data if the caller exports the context and writes it to a file.
+      We don't actually use those bytes at all, but valgrind still
+      complains.  */
+   memset(q, 0xfe, sizeof(*q));
+
    q->do_replay = do_replay;
    q->do_sequence = do_sequence;
    q->mask = wide_nums ? ~(gssint_uint64)0 : 0xffffffffUL;