Procházet zdrojové kódy

[LibOS] Remove lingering warnings

- regression/large_dir_read.c: Wformat-overflow
- shim_rtld.c: __load_elf_object(): Wmaybe-uninitialized
- shim_parser.c: parse_syscall_after(): Wmaybe-uninitialized
- shim_msgget.c: get_sysv_msg(): Wmaybe-uninitialized
- shim_semget.c: __add_sem_handle(): Wmaybe-uninitialized
- shim_checkpoint.c: do_migrate_process(): Wmaybe-uninitialized
- fs/proc/thread.c: proc_thread_maps_open(): Wmaybe-uninitialized
- shim_ipc_sysv.c: ipc_sysv_semctl_callback(): Wstrict-aliasing
- shim_socket.c: inet_save_addr(): Wstrict-aliasing
Isaku Yamahata před 4 roky
rodič
revize
aac7a83037

+ 3 - 3
LibOS/shim/src/elf/shim_rtld.c

@@ -378,9 +378,6 @@ static struct link_map* __map_elf_object(struct shim_handle* file, const void* f
     /* This is the ELF header.  We read it in `open_verify'.  */
     const ElfW(Ehdr)* header = fbp;
 
-    if (type == OBJECT_REMAP)
-        goto do_remap;
-
     /* Extract the remaining details we need from the ELF header
        and then read in the program header table.  */
     l->l_addr  = (ElfW(Addr))addr;
@@ -391,6 +388,9 @@ static struct link_map* __map_elf_object(struct shim_handle* file, const void* f
     size_t maplength       = header->e_phnum * sizeof(ElfW(Phdr));
     const ElfW(Phdr)* phdr = (fbp + header->e_phoff);
 
+    if (type == OBJECT_REMAP)
+        goto do_remap;
+
     if (type == OBJECT_LOAD && header->e_phoff + maplength <= (size_t)fbp_len) {
         new_phdr = (ElfW(Phdr)*)malloc(maplength);
         if (!new_phdr) {

+ 2 - 1
LibOS/shim/src/fs/proc/thread.c

@@ -467,6 +467,7 @@ static int proc_thread_maps_open(struct shim_handle* hdl, const char* name, int
     const char* next;
     size_t next_len;
     IDTYPE pid;
+    char* buffer = NULL;
     int ret = parse_thread_name(name, &pid, &next, &next_len, NULL);
     if (ret < 0)
         return ret;
@@ -506,7 +507,7 @@ retry_dump_vmas:
 
     count              = ret;
     size_t buffer_size = DEFAULT_VMA_BUFFER_SIZE, offset = 0;
-    char* buffer = malloc(buffer_size);
+    buffer = malloc(buffer_size);
     if (!buffer) {
         ret = -ENOMEM;
         goto err;

+ 2 - 2
LibOS/shim/src/ipc/shim_ipc_sysv.c

@@ -622,8 +622,8 @@ int ipc_sysv_semctl_callback(IPC_CALLBACK_ARGS) {
             if (msgin->semnum >= sem->nsems)
                 break;
 
-            sem->sems[msgin->semnum].val = *((int*)msgin->vals);
-            ret                          = RESPONSE_CALLBACK;
+            memcpy(&sem->sems[msgin->semnum].val, msgin->vals, msgin->valsize);
+            ret = RESPONSE_CALLBACK;
             break;
         }
 

+ 2 - 1
LibOS/shim/src/shim_checkpoint.c

@@ -930,6 +930,7 @@ int do_migrate_process (int (*migrate) (struct shim_cp_store *,
     struct shim_process * new_process = NULL;
     struct newproc_header hdr;
     size_t bytes;
+    PAL_HANDLE gipc_hdl = NULL;
     memset(&hdr, 0, sizeof(hdr));
 
 #ifdef PROFILE
@@ -961,7 +962,7 @@ int do_migrate_process (int (*migrate) (struct shim_cp_store *,
      */
     bool use_gipc = false;
     PAL_NUM gipc_key;
-    PAL_HANDLE gipc_hdl = DkCreatePhysicalMemoryChannel(&gipc_key);
+    gipc_hdl = DkCreatePhysicalMemoryChannel(&gipc_key);
 
     if (gipc_hdl) {
         debug("created gipc store: gipc:%lu\n", gipc_key);

+ 3 - 6
LibOS/shim/src/shim_parser.c

@@ -518,8 +518,8 @@ void parse_syscall_after(int sysno, const char* name, int nr, ...) {
     else
         PRINTF("---- shim_%s(", name);
 
-    unsigned long ret_ptr;
-    int ret_val;
+    unsigned long ret_ptr = 0;
+    int ret_val = 0;
 
     if (is_pointer(ret_type))
         ret_ptr = (unsigned long)va_arg(ap, void*);
@@ -550,10 +550,7 @@ void parse_syscall_after(int sysno, const char* name, int nr, ...) {
         else
             PRINTF(") = %ld\n", (long)ret_ptr);
     } else {
-        if (ret_val >= 0)
-            PRINTF(") = %d\n", ret_val);
-        else
-            PRINTF(") = %d\n", ret_val);
+        PRINTF(") = %d\n", ret_val);
     }
 
     va_end(ap);

+ 1 - 3
LibOS/shim/src/sys/shim_msgget.c

@@ -668,8 +668,6 @@ int get_sysv_msg(struct shim_msg_handle* msgq, long type, size_t size, void* dat
 #endif
 
     if (!msgq->owned) {
-        IDTYPE msqid = msgq->msqid;
-
         if (src) {
             struct shim_ipc_info* owner = msgq->owner;
             ret = owner ? ipc_sysv_movres_send(src, owner->vmid, qstrgetstr(&owner->uri),
@@ -680,7 +678,7 @@ int get_sysv_msg(struct shim_msg_handle* msgq, long type, size_t size, void* dat
 
     unowned:
         unlock(&hdl->lock);
-        ret = ipc_sysv_msgrcv_send(msqid, type, flags, data, size);
+        ret = ipc_sysv_msgrcv_send(msgq->msqid, type, flags, data, size);
         if (ret != -EAGAIN && ret != -ECONNREFUSED)
             goto out;
 

+ 2 - 1
LibOS/shim/src/sys/shim_semget.c

@@ -56,6 +56,7 @@ static int __add_sem_handle(unsigned long key, IDTYPE semid, int nsems, bool own
     LISTP_TYPE(shim_sem_handle)* sid_head = semid ? &sem_sid_hlist[SEM_HASH(semid)] : NULL;
 
     struct shim_sem_handle* tmp;
+    struct shim_handle* hdl = NULL;
     int ret = 0;
 
     if (key_head)
@@ -76,7 +77,7 @@ static int __add_sem_handle(unsigned long key, IDTYPE semid, int nsems, bool own
             }
         }
 
-    struct shim_handle* hdl = get_new_handle();
+    hdl = get_new_handle();
     if (!hdl)
         return -ENOMEM;
 

+ 5 - 4
LibOS/shim/src/sys/shim_socket.c

@@ -359,10 +359,11 @@ static void inet_save_addr(int domain, struct addr_inet* addr, const struct sock
         if (saddr->sa_family == AF_INET) {
             const struct sockaddr_in* in           = (const struct sockaddr_in*)saddr;
             addr->port                             = __ntohs(in->sin_port);
-            ((uint32_t*)&addr->addr.v6.s6_addr)[0] = 0;
-            ((uint32_t*)&addr->addr.v6.s6_addr)[1] = 0;
-            ((uint32_t*)&addr->addr.v6.s6_addr)[2] = 0xffff0000;
-            ((uint32_t*)&addr->addr.v6.s6_addr)[3] = in->sin_addr.s_addr;
+            uint32_t s_addr[4] = {
+                /* in->sin_addr.s_addr is already network byte order */
+                __htonl(0), __htonl(0), __htonl(0x0000ffff), in->sin_addr.s_addr
+            };
+            memcpy(&addr->addr.v6.s6_addr, s_addr, sizeof(s_addr));
         } else {
             const struct sockaddr_in6* in6 = (const struct sockaddr_in6*)saddr;
             addr->port                     = __ntohs(in6->sin6_port);

+ 1 - 1
LibOS/shim/test/regression/large_dir_read.c

@@ -18,7 +18,7 @@ static int is_dot_or_dotdot(const char* name) {
 
 int main(int argc, char* argv[]) {
     int fd = 0, ret = 1;
-    char name[0x10]     = {0};
+    char name[21]     = {0};
     DIR* dir            = NULL;
     struct dirent* dent = NULL;
     unsigned long i     = 0;