Patch applied. Many thanks.

Cheers,

Simon.



On 21/12/17 04:01, Kurt H Maier wrote:
> Right now bindtodevice() declares an ifreq, copies the device name into
> it, and passes a pointer to the entire structure as the optval for
> setsockopt.  This only works because ifr_name happens to be the first
> element in the ifreq data structure.  What actually gets passed to
> setsockopt looks like 
>   "wlp3s0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255nzHmU\0\0"...
> and is 40 bytes long.
> 
> We could change it so we pass ifr.ifr_name, but this is wasteful too,
> since device is already in the format we want.
> 
> Attached is a patch that uses device directly, and passes IFNAMSIZ as
> optlen.
> 
> Thanks,
> khm
> 
> 
> diff --git a/src/dhcp-common.c b/src/dhcp-common.c
> index eae9ae3..8e128fa 100644
> --- a/src/dhcp-common.c
> +++ b/src/dhcp-common.c
> @@ -485,11 +485,8 @@ char *whichdevice(void)
>   
>  void  bindtodevice(char *device, int fd)
>  {
> -  struct ifreq ifr;
> -  
> -  strcpy(ifr.ifr_name, device);
>    /* only allowed by root. */
> -  if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) 
> == -1 &&
> +  if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, device, IFNAMSIZ) == -1 &&
>        errno != EPERM)
>      die(_("failed to set SO_BINDTODEVICE on DHCP socket: %s"), NULL, 
> EC_BADNET);
>  }
> 
> 
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss@lists.thekelleys.org.uk
> http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
> 


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to