On Thu, Oct 19, 2017 at 08:58:12PM +0200, Jan Klemkow wrote:
> 
> Index: tftpd.c
> ===================================================================
> RCS file: /mount/openbsd/cvs/src/usr.sbin/tftpd/tftpd.c,v
> retrieving revision 1.39
> diff -u -p -r1.39 tftpd.c
> --- tftpd.c   26 May 2017 17:38:46 -0000      1.39
> +++ tftpd.c   19 Oct 2017 18:27:24 -0000
> @@ -903,8 +903,17 @@ again:
>  
>       if (rwmap != NULL)
>               rewrite_map(client, filename);
> -     else
> -             tftp_open(client, filename);
> +     else {
> +             char nfilename[PATH_MAX];
> +
> +             snprintf(nfilename, sizeof nfilename, "%s/%s",
> +                 getip(&client->ss), filename);

- filename has PATH_MAX length
- getip(&client->ss) could have NI_MAXHOST length

so nfilename could be larger than PATH_MAX (sizeof nfilename).

I assume the return of snprintf() need to be checked. if truncation
occured, a warning should be issued and nfilename discarded (just
calling tftp_open(client, filename)) ?

> +
> +             if (access(nfilename, R_OK) == 0)
> +                     tftp_open(client, nfilename);
> +             else
> +                     tftp_open(client, filename);
> +     }
>  
>       return;
>  
> 

thanks
-- 
Sebastien Marie

Reply via email to