On 10/17/2019 5:45 PM, Ferruh Yigit wrote:
> On 10/17/2019 5:04 PM, Ferruh Yigit wrote:
>> On 10/17/2019 12:52 PM, Jakub Grajciar -X (jgrajcia - PANTHEON TECHNOLOGIES
>> at
>> Cisco) wrote:
>>>
>>>> Hi Jakub,
>>>>
>>>> Just to double check if anyone is looking into the bind() error issue
>>>> which is
>>>> since following commit, I am waiting for more input on it.
>>>>
>>>> Commit b923866c6974 ("net/memif: allow for full key size in socket name")
>>>> Cc: [email protected]
>>>
>>> Definitely an issue, I must have messed something up while applying the
>>> patch for testing, as it's not working for me either. I looked into bind()
>>> and it seems that the size has upper limit. Are you able to revert the
>>> patch?
>>
>> +1 to logically revert the patch, but actually I think it is easier to do an
>> incremental patch on top of current head to fix the issue.
>>
>> The patch replaces hard-coded 'key_len' to a macro which is good to keep,
>> also
>> number of lines needs to be changed for fix looks less than number of lines
>> will
>> be changed by revert J
>>
>>>
>>> As for the issue that patch addresses, there is an incorrect information in
>>> the docs that 'socket' parameter length is 256b. It should be 108b as that
>>> is the limitation on Linux.
>>
>> I don't know the doc but code has it as 256b [1] and the issue patch
>> addresses
>> looks like a valid issue. If you are OK to limit the 'key_len' to 108 [2],
>> the
>> fix is really easy.
>
> Hi Jakub,
>
> Something like following seems fixing the issue, can you please make a patch
> for
> the fix?
Ping.
Can it possible to make this on time so rc1 doesn't released with broken PMD?
Thanks,
ferruh
>
>
>
> diff --git a/drivers/net/memif/memif_socket.c
> b/drivers/net/memif/memif_socket.c
> index 0c71f6c454..aa4f549f2c 100644
> --- a/drivers/net/memif/memif_socket.c
> +++ b/drivers/net/memif/memif_socket.c
> @@ -868,8 +868,7 @@ memif_socket_create(struct pmd_internals *pmd,
> const char *key, uint8_t listener)
> {
> struct memif_socket *sock;
> - struct sockaddr_un *un;
> - char un_buf[MEMIF_SOCKET_UN_SIZE];
> + struct sockaddr_un un;
> int sockfd;
> int ret;
> int on = 1;
> @@ -889,16 +888,14 @@ memif_socket_create(struct pmd_internals *pmd,
> if (sockfd < 0)
> goto error;
>
> - memset(un_buf, 0, sizeof(un_buf));
> - un = (struct sockaddr_un *)un_buf;
> - un->sun_family = AF_UNIX;
> - strlcpy(un->sun_path, sock->filename, MEMIF_SOCKET_KEY_LEN);
> + un.sun_family = AF_UNIX;
> + strlcpy(un.sun_path, sock->filename, MEMIF_SOCKET_KEY_LEN);
>
> ret = setsockopt(sockfd, SOL_SOCKET, SO_PASSCRED, &on,
> sizeof(on));
> if (ret < 0)
> goto error;
> - ret = bind(sockfd, (struct sockaddr *)un,
> MEMIF_SOCKET_UN_SIZE);
> + ret = bind(sockfd, (struct sockaddr *)&un, sizeof(struct
> sockaddr_un));
> if (ret < 0)
> goto error;
> ret = listen(sockfd, 1);
> diff --git a/drivers/net/memif/memif_socket.h b/drivers/net/memif
> /memif_socket.h
> index 9f40f8d138..12fa123230 100644
> --- a/drivers/net/memif/memif_socket.h
> +++ b/drivers/net/memif/memif_socket.h
> @@ -79,7 +79,7 @@ struct memif_socket_dev_list_elt {
> };
>
> #define MEMIF_SOCKET_HASH_NAME "memif-sh"
> -#define MEMIF_SOCKET_KEY_LEN 256
> +#define MEMIF_SOCKET_KEY_LEN 100
>
> struct memif_socket {
> struct rte_intr_handle intr_handle; /**< interrupt handle */
>
>
>
>>
>>
>> [1]
>> http://lxr.dpdk.org/dpdk/v19.08/source/drivers/net/memif/memif_socket.h#L84
>>
>> [2]
>> If I remember correctly the suggested length was 99 for portability, it seems
>> different OS has this value different and 99 is the smallest ...
>>
>