From: Olga Kornievskaia Dynamically allocate buffer of the correct length rather than using fixed-length buffer. --- nfs-utils-1.0.7-kwc/utils/gssd/gssd_proc.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff -puN utils/gssd/gssd_proc.c~gssd_remove_do_downcall_fixed_length_buffer utils/gssd/gssd_proc.c --- nfs-utils-1.0.7/utils/gssd/gssd_proc.c~gssd_remove_do_downcall_fixed_length_buffer 2005-10-25 17:15:02.041982000 -0400 +++ nfs-utils-1.0.7-kwc/utils/gssd/gssd_proc.c 2005-10-25 17:15:02.056982000 -0400 @@ -366,11 +366,16 @@ static int do_downcall(int k5_fd, uid_t uid, struct authgss_private_data *pd, gss_buffer_desc *context_token) { - char buf[2048]; - char *p = buf, *end = buf + 2048; + char *buf = NULL, *p = NULL, *end = NULL; unsigned int timeout = 0; /* XXX decide on a reasonable value */ + unsigned int buf_size = 0; printerr(1, "doing downcall\n"); + buf_size = sizeof(uid) + sizeof(timeout) + sizeof(pd->pd_seq_win) + + sizeof(pd->pd_ctx_hndl.length) + pd->pd_ctx_hndl.length + + sizeof(context_token->length) + context_token->length; + p = buf = malloc(buf_size); + end = buf + buf_size; if (WRITE_BYTES(&p, end, uid)) goto out_err; /* Not setting any timeout for now: */ @@ -380,8 +385,10 @@ do_downcall(int k5_fd, uid_t uid, struct if (write_buffer(&p, end, context_token)) goto out_err; if (write(k5_fd, buf, p - buf) < p - buf) goto out_err; + if (buf) free(buf); return 0; out_err: + if (buf) free(buf); printerr(0, "Failed to write downcall!\n"); return -1; } _