Module: kamailio
Branch: master
Commit: 1b7ea63df655246b5b6ca123d9ed25d1764d9402
URL: 
https://github.com/kamailio/kamailio/commit/1b7ea63df655246b5b6ca123d9ed25d1764d9402

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2023-12-11T15:37:26+01:00

core: main - check limit for values of -m and -M

---

Modified: src/main.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/1b7ea63df655246b5b6ca123d9ed25d1764d9402.diff
Patch: 
https://github.com/kamailio/kamailio/commit/1b7ea63df655246b5b6ca123d9ed25d1764d9402.patch

---

diff --git a/src/main.c b/src/main.c
index db694381421..3aa79b73d91 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2094,6 +2094,7 @@ int main(int argc, char **argv)
        struct name_lst *n_lst;
        char *p;
        struct stat st = {0};
+       long l1 = 0;
 
 #define KSR_TBUF_SIZE 512
        char tbuf[KSR_TBUF_SIZE];
@@ -2181,12 +2182,20 @@ int main(int argc, char **argv)
                                        fprintf(stderr, "bad private mem 
size\n");
                                        goto error;
                                }
-                               pkg_mem_size = strtol(optarg, &tmp, 10) * 1024 
* 1024;
+                               l1 = strtol(optarg, &tmp, 10);
                                if(tmp && (*tmp)) {
                                        fprintf(stderr, "bad private mem size 
number: -M %s\n",
                                                        optarg);
                                        goto error;
-                               };
+                               }
+                               /* safety check for upper limit of 1TB */
+                               if(l1 <= 0 || l1 > 1024L * 1024) {
+                                       fprintf(stderr,
+                                                       "our of limits private 
mem size number: -M %s\n",
+                                                       optarg);
+                                       goto error;
+                               }
+                               pkg_mem_size = 1024UL * 1024 * l1;
                                break;
                        case 'x':
                                sr_memmng_shm = optarg;
@@ -2315,11 +2324,18 @@ int main(int argc, char **argv)
                                        fprintf(stderr, "bad shared mem 
size\n");
                                        goto error;
                                }
-                               shm_mem_size = strtol(optarg, &tmp, 10) * 1024 
* 1024;
+                               l1 = strtol(optarg, &tmp, 10);
                                if(tmp && (*tmp)) {
                                        fprintf(stderr, "bad shmem size number: 
-m %s\n", optarg);
                                        goto error;
-                               };
+                               }
+                               /* safety check for upper limit of 16TB */
+                               if(l1 <= 0 || l1 > 16L * 1024 * 1024) {
+                                       fprintf(stderr, "our of limits shmem 
size number: -m %s\n",
+                                                       optarg);
+                                       goto error;
+                               }
+                               shm_mem_size = 1024UL * 1024 * l1;
                                LM_INFO("shared memory: %ld bytes\n", 
shm_mem_size);
                                break;
                        case 'd':

_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to [email protected]

Reply via email to