summaryrefslogtreecommitdiffstats
path: root/daemons/clvmd/clvmd.c
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2012-02-28 09:58:19 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2012-02-28 09:58:19 +0000
commit696052b78e47cc2840118b82fd035ee03dccc2f8 (patch)
treef85ed15fc08ada0c804b56500968aec18347e9d0 /daemons/clvmd/clvmd.c
parent782a37e4115906f8d4a0485f0911d43b897bf07a (diff)
downloadlvm2-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.c4
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