multipath-tools: New way to limit the IPC command length.
authorGris Ge <fge@redhat.com>
Fri, 20 Jan 2017 13:39:00 +0000 (21:39 +0800)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Fri, 10 Feb 2017 11:35:54 +0000 (12:35 +0100)
commitbb219efb131aef61c331f181193bf1d80e6b2a99
tree8016bc1290ef9f606487e0c5d8781f979fe8a4ce
parentadaeeb24777a9235b573c0135dbe1b24c45730aa
multipath-tools: New way to limit the IPC command length.

Problem:

    mpath_recv_reply() from libmpathcmd return -EINVAL on command 'show
    maps json' with 2k paths.  No error will be triggered for command
    `multipathd -k'show maps json` as multipathd is using their own
    implementation on recv_packet() which does not have size limitation.

Root cause:

    Commit 174e717d351789a3cb29e1417f8e910baabcdb16 introduced the
    limitation on max bytes(65535) of reply string from multipathd.
    With 2k paths(1k mpaths) simulated by scsi_debug, the 'show maps json'
    requires 2066784 bytes which trigged the EINVAL error.

Fix:
    * Remove the limitation of MAX_REPLY_LEN in libmpathcmd.

    * New functions `recv_packet_from_client()` in uxsock.h of libmultipath
      which enforce the limitation of buffer size to 512(_MAX_CMD_LEN).

    * Change multipathd socket listener to use
      `recv_packet_from_client()`.

Signed-off-by: Gris Ge <fge@redhat.com>
libmpathcmd/mpath_cmd.c
libmultipath/uxsock.c
libmultipath/uxsock.h
multipathd/uxlsnr.c