diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2012-02-28 09:58:19 +0000 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2012-02-28 09:58:19 +0000 |
commit | 696052b78e47cc2840118b82fd035ee03dccc2f8 (patch) | |
tree | f85ed15fc08ada0c804b56500968aec18347e9d0 /daemons/clvmd/clvmd.c | |
parent | 782a37e4115906f8d4a0485f0911d43b897bf07a (diff) | |
download | lvm2-696052b78e47cc2840118b82fd035ee03dccc2f8.tar.gz lvm2-696052b78e47cc2840118b82fd035ee03dccc2f8.tar.xz lvm2-696052b78e47cc2840118b82fd035ee03dccc2f8.zip |
Limit max size of clvmd message
This could be seen as some sort of simple validation - it's not easy to
recognize a valid message for now - but we definitely do not want to
allocate a lot of megabytes in clvmd memory locked daemon when broken
message gets in.
Size of 8000 is just selected for now - possibly there could be much
lower value put in.
Diffstat (limited to 'daemons/clvmd/clvmd.c')
-rw-r--r-- | daemons/clvmd/clvmd.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/daemons/clvmd/clvmd.c b/daemons/clvmd/clvmd.c index 89c39d48..5a24bc85 100644 --- a/daemons/clvmd/clvmd.c +++ b/daemons/clvmd/clvmd.c @@ -49,6 +49,7 @@ #endif #define MAX_RETRIES 4 +#define MAX_MISSING_LEN = 8000 /* Max supported clvmd message size ? */ #define ISLOCAL_CSID(c) (memcmp(c, our_csid, max_csid_len) == 0) @@ -1204,7 +1205,8 @@ static int read_from_local_sock(struct local_client *thisfd) missing_len = 0; /* We need at least sizeof(struct clvm_header) bytes in buffer */ - if (len < sizeof(struct clvm_header) || argslen < 0) { + if (len < sizeof(struct clvm_header) || argslen < 0 || + missing_len > MAX_MISSING_LEN) { struct clvm_header reply = { .cmd = CLVMD_CMD_REPLY, .status = EINVAL |