Re: [PATCH 2/5] cifs.upcall: clean up key description decoding routine

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Acked-by: Igor Mammedov <niallain@xxxxxxxxx>

On Fri, Jan 7, 2011 at 5:11 PM, Jeff Layton <jlayton@xxxxxxxxx> wrote:
> ...and switch the code to using strndup. Check for allocation errors as
> well, and fix some off-by-one bugs in the ones that decode strings.
>
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxx>
> ---
> Âcifs.upcall.c | Â 30 ++++++++++++++++--------------
> Â1 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/cifs.upcall.c b/cifs.upcall.c
> index 33b7e4c..d83dddf 100644
> --- a/cifs.upcall.c
> +++ b/cifs.upcall.c
> @@ -473,10 +473,13 @@ decode_key_description(const char *desc, struct decoded_args *arg)
> Â Â Â Â Â Â Â Â Â Â Â Âelse
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âlen = pos - tkn;
>
> - Â Â Â Â Â Â Â Â Â Â Â len -= 4;
> + Â Â Â Â Â Â Â Â Â Â Â len -= 5;
> Â Â Â Â Â Â Â Â Â Â Â ÂSAFE_FREE(arg->hostname);
> - Â Â Â Â Â Â Â Â Â Â Â arg->hostname = calloc(sizeof(char), len);
> - Â Â Â Â Â Â Â Â Â Â Â strlcpy(arg->hostname, tkn + 5, len);
> + Â Â Â Â Â Â Â Â Â Â Â arg->hostname = strndup(tkn + 5, len);
> + Â Â Â Â Â Â Â Â Â Â Â if (arg->hostname == NULL) {
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â syslog(LOG_ERR, "Unable to allocate memory");
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â return 1;
> + Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â Âretval |= DKD_HAVE_HOSTNAME;
> Â Â Â Â Â Â Â Â} else if (!strncmp(tkn, "ip4=", 4) || !strncmp(tkn, "ip6=", 4)) {
> Â Â Â Â Â Â Â Â Â Â Â Âif (pos == NULL)
> @@ -484,10 +487,13 @@ decode_key_description(const char *desc, struct decoded_args *arg)
> Â Â Â Â Â Â Â Â Â Â Â Âelse
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âlen = pos - tkn;
>
> - Â Â Â Â Â Â Â Â Â Â Â len -= 3;
> + Â Â Â Â Â Â Â Â Â Â Â len -= 4;
> Â Â Â Â Â Â Â Â Â Â Â ÂSAFE_FREE(arg->ip);
> - Â Â Â Â Â Â Â Â Â Â Â arg->ip = calloc(sizeof(char), len);
> - Â Â Â Â Â Â Â Â Â Â Â strlcpy(arg->ip, tkn + 4, len);
> + Â Â Â Â Â Â Â Â Â Â Â arg->ip = strndup(tkn + 4, len);
> + Â Â Â Â Â Â Â Â Â Â Â if (arg->ip == NULL) {
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â syslog(LOG_ERR, "Unable to allocate memory");
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â return 1;
> + Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â Âretval |= DKD_HAVE_IP;
> Â Â Â Â Â Â Â Â} else if (strncmp(tkn, "pid=", 4) == 0) {
> Â Â Â Â Â Â Â Â Â Â Â Âerrno = 0;
> @@ -496,9 +502,8 @@ decode_key_description(const char *desc, struct decoded_args *arg)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âsyslog(LOG_ERR, "Invalid pid format: %s",
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â strerror(errno));
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âreturn 1;
> - Â Â Â Â Â Â Â Â Â Â Â } else {
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_PID;
> Â Â Â Â Â Â Â Â Â Â Â Â}
> + Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_PID;
> Â Â Â Â Â Â Â Â} else if (strncmp(tkn, "sec=", 4) == 0) {
> Â Â Â Â Â Â Â Â Â Â Â Âif (strncmp(tkn + 4, "krb5", 4) == 0) {
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âretval |= DKD_HAVE_SEC;
> @@ -514,9 +519,8 @@ decode_key_description(const char *desc, struct decoded_args *arg)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âsyslog(LOG_ERR, "Invalid uid format: %s",
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â strerror(errno));
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âreturn 1;
> - Â Â Â Â Â Â Â Â Â Â Â } else {
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_UID;
> Â Â Â Â Â Â Â Â Â Â Â Â}
> + Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_UID;
> Â Â Â Â Â Â Â Â} else if (strncmp(tkn, "creduid=", 8) == 0) {
> Â Â Â Â Â Â Â Â Â Â Â Âerrno = 0;
> Â Â Â Â Â Â Â Â Â Â Â Âarg->creduid = strtol(tkn + 8, NULL, 16);
> @@ -524,9 +528,8 @@ decode_key_description(const char *desc, struct decoded_args *arg)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âsyslog(LOG_ERR, "Invalid creduid format: %s",
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â strerror(errno));
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âreturn 1;
> - Â Â Â Â Â Â Â Â Â Â Â } else {
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_CREDUID;
> Â Â Â Â Â Â Â Â Â Â Â Â}
> + Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_CREDUID;
> Â Â Â Â Â Â Â Â} else if (strncmp(tkn, "ver=", 4) == 0) { Â Â Â/* if version */
> Â Â Â Â Â Â Â Â Â Â Â Âerrno = 0;
> Â Â Â Â Â Â Â Â Â Â Â Âarg->ver = strtol(tkn + 4, NULL, 16);
> @@ -534,9 +537,8 @@ decode_key_description(const char *desc, struct decoded_args *arg)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âsyslog(LOG_ERR, "Invalid version format: %s",
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â strerror(errno));
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âreturn 1;
> - Â Â Â Â Â Â Â Â Â Â Â } else {
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_VERSION;
> Â Â Â Â Â Â Â Â Â Â Â Â}
> + Â Â Â Â Â Â Â Â Â Â Â retval |= DKD_HAVE_VERSION;
> Â Â Â Â Â Â Â Â}
> Â Â Â Â Â Â Â Âif (pos == NULL)
> Â Â Â Â Â Â Â Â Â Â Â Âbreak;
> --
> 1.7.3.4
>
>
ÿô.nlj·Ÿ®‰­†+%ŠË±é¥Šwÿº{.nlj·¥Š{±ý¶›¡Ü}©ž²ÆzÚj:+v‰¨þø®w¥þŠàÞ¨è&¢)ß«a¶Úÿûz¹ÞúŽŠÝjÿŠwèf



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux