From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751895AbaGGHfN (ORCPT ); Mon, 7 Jul 2014 03:35:13 -0400 Received: from cantor2.suse.de ([195.135.220.15]:54157 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750911AbaGGHfK (ORCPT ); Mon, 7 Jul 2014 03:35:10 -0400 Date: Mon, 07 Jul 2014 09:35:07 +0200 Message-ID: From: Takashi Iwai To: Joe Perches Cc: alsa-devel@alsa-project.org, LKML Subject: Re: [PATCH] ALSA: hda - Fix and neaten print_nid_path/debug_badness In-Reply-To: <1404590522.6384.62.camel@joe-AO725> References: <1404590522.6384.62.camel@joe-AO725> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/24.3 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Sat, 05 Jul 2014 13:02:02 -0700, Joe Perches wrote: > > print_nid_path has a possible buffer overflow if > struct nid_path.path values are > 256. > > Avoid this and neaten the output to remove the leading ':' > > Neaten debug_badness to always verify arguments. > > Signed-off-by: Joe Perches Thanks, applied. Although the overflow would never happen in practice (the id can't be over 8 bit from the definition in the HD-audio controller side), it's still better to have a proper check. Takashi > --- > sound/pci/hda/hda_generic.c | 20 +++++++++++--------- > 1 file changed, 11 insertions(+), 9 deletions(-) > > diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c > index 589e47c..b293583 100644 > --- a/sound/pci/hda/hda_generic.c > +++ b/sound/pci/hda/hda_generic.c > @@ -350,16 +350,16 @@ static void print_nid_path(struct hda_codec *codec, > const char *pfx, struct nid_path *path) > { > char buf[40]; > + char *pos = buf; > int i; > > + *pos = 0; > + for (i = 0; i < path->depth; i++) > + pos += scnprintf(pos, sizeof(buf) - (pos - buf), "%s%02x", > + pos != buf ? ":" : "", > + path->path[i]); > > - buf[0] = 0; > - for (i = 0; i < path->depth; i++) { > - char tmp[4]; > - sprintf(tmp, ":%02x", path->path[i]); > - strlcat(buf, tmp, sizeof(buf)); > - } > - codec_dbg(codec, "%s path: depth=%d %s\n", pfx, path->depth, buf); > + codec_dbg(codec, "%s path: depth=%d '%s'\n", pfx, path->depth, buf); > } > > /* called recursively */ > @@ -1700,9 +1700,11 @@ static int fill_and_eval_dacs(struct hda_codec *codec, > #define DEBUG_BADNESS > > #ifdef DEBUG_BADNESS > -#define debug_badness(fmt, args...) codec_dbg(codec, fmt, ##args) > +#define debug_badness(fmt, ...) \ > + codec_dbg(codec, fmt, ##__VA_ARGS__) > #else > -#define debug_badness(...) > +#define debug_badness(fmt, ...) \ > + do { if (0) codec_dbg(codec, fmt, ##__VA_ARGS__); } while (0) > #endif > > #ifdef DEBUG_BADNESS > >