2019年7月12日(金) 11:22 Yasufumi Ogawa <yasufu...@gmail.com>: > On 2019/07/11 22:14, Burakov, Anatoly wrote: > > On 11-Jul-19 12:57 PM, Yasufumi Ogawa wrote: > >> On 2019/07/11 19:53, Burakov, Anatoly wrote: > >>> On 11-Jul-19 11:31 AM, yasufu...@gmail.com wrote: > >>>> From: Yasufumi Ogawa <ogawa.yasuf...@lab.ntt.co.jp> > >>>> > >>> <...> > >>> > >>>> + if (getpid() == 1) { > >>>> + FILE *hn_fp; > >>>> + hn_fp = fopen("/etc/hostname", "r"); > >>>> + if (hn_fp == NULL) { > >>>> + RTE_LOG(ERR, EAL, > >>>> + "Cannot open '/etc/hostname' for secondary\n"); > >>>> + return -1; > >>>> + } > >>>> + > >>>> + /* with docker, /etc/hostname just has one entry of > >>>> hostname */ > >>>> + if (fscanf(hn_fp, "%s", proc_id) == EOF) { > >>> > >>> Apologies for not pointing this out earlier, but do i understand > >>> correctly that there's no bounds checking here, and fscanf() will > >>> write however many bytes it wants? > >> I understand "%s" is not appropriate. hostname is 12 bytes char and I > >> thought proc_id[16] is enough, but it is unsafe. In addition, hostname > >> can be defined by user with docker's option, so it should be enough > >> for user defined name. > >> > >> How do you think expecting max 32 chars of hostname and set boundary > >> "%32s" as following? > >> > >> proc_id[33]; /* define proc id from hostname less than 33 bytes. > */ > >> ... > >> if (fscanf(hn_fp, "%32s", proc_id) == EOF) { > >> > > > > As long as it takes NULL-termination into account as well, it should be > > OK. I can't recall off the top of my head if %32s includes NULL > > terminator (probably not?). > Do you agree if initialize with NULL chars to ensure proc_id is > NULL-terminated? As tested on my environment, "%Ns" sets next of Nth > char as NULL, but it seems more reliable. > proc_id[33] = { 0 }; > Hi Anatoly,
I would like to send v4 patch if it is agreeable. > > Yasufumi >