Signed-off-by: Jan Friesse <[email protected]>
---
 include/corosync/ipc_cpg.h |    4 +++-
 lib/cpg.c                  |    6 ++++++
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/include/corosync/ipc_cpg.h b/include/corosync/ipc_cpg.h
index 76a7c88..a95335a 100644
--- a/include/corosync/ipc_cpg.h
+++ b/include/corosync/ipc_cpg.h
@@ -40,6 +40,8 @@
 #include <corosync/corotypes.h>
 #include <corosync/mar_gen.h>
 
+#define CPG_ZC_PATH_LEN                                128
+
 enum req_cpg_types {
        MESSAGE_REQ_CPG_JOIN = 0,
        MESSAGE_REQ_CPG_LEAVE = 1,
@@ -298,7 +300,7 @@ struct res_lib_cpg_iterationfinalize {
 typedef struct {
         struct qb_ipc_request_header header __attribute__((aligned(8)));
         size_t map_size __attribute__((aligned(8)));
-        char path_to_file[128] __attribute__((aligned(8)));
+        char path_to_file[CPG_ZC_PATH_LEN] __attribute__((aligned(8)));
 } mar_req_coroipcc_zc_alloc_t __attribute__((aligned(8)));
 
 typedef struct {
diff --git a/lib/cpg.c b/lib/cpg.c
index 046532b..4b92f44 100644
--- a/lib/cpg.c
+++ b/lib/cpg.c
@@ -834,6 +834,12 @@ cs_error_t cpg_zcb_alloc (
        map_size = size + sizeof (struct req_lib_cpg_mcast) + sizeof (struct 
coroipcs_zc_header);
        assert(memory_map (path, "corosync_zerocopy-XXXXXX", &buf, map_size) != 
-1);
 
+       if (strlen(path) >= CPG_ZC_PATH_LEN) {
+               unlink(path);
+               munmap (buf, map_size);
+               return (CS_ERR_NAME_TOO_LONG);
+       }
+
        req_coroipcc_zc_alloc.header.size = sizeof 
(mar_req_coroipcc_zc_alloc_t);
        req_coroipcc_zc_alloc.header.id = MESSAGE_REQ_CPG_ZC_ALLOC;
        req_coroipcc_zc_alloc.map_size = map_size;
-- 
1.7.1

_______________________________________________
discuss mailing list
[email protected]
http://lists.corosync.org/mailman/listinfo/discuss

Reply via email to