New Defects reported by Coverity Scan for RTEMS

scan-admin at coverity.com scan-admin at coverity.com
Mon Aug 29 22:55:47 UTC 2022


Hi,

Please find the latest report on new defect(s) introduced to RTEMS found with Coverity Scan.

61 new defect(s) introduced to RTEMS found with Coverity Scan.
5 defect(s), reported by Coverity Scan earlier, were marked fixed in the recent build analyzed by Coverity Scan.

New defect(s) Reported-by: Coverity Scan
Showing 20 of 61 defect(s)


** CID 1512552:  High impact quality  (Y2K38_SAFETY)
/cpukit/score/src/kern_tc.c: 1804 in _Timecounter_Windup()


________________________________________________________________________________________________________
*** CID 1512552:  High impact quality  (Y2K38_SAFETY)
/cpukit/score/src/kern_tc.c: 1804 in _Timecounter_Windup()
1798     	/* Go live with the new struct timehands. */
1799     #ifdef FFCLOCK
1800     	switch (sysclock_active) {
1801     	case SYSCLOCK_FBCK:
1802     #endif
1803     		time_second = th->th_microtime.tv_sec;
>>>     CID 1512552:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "th->th_offset.sec" is cast to "int32_t".
1804     		time_uptime = th->th_offset.sec;
1805     #ifdef FFCLOCK
1806     		break;
1807     	case SYSCLOCK_FFWD:
1808     		time_second = fftimehands->tick_time_lerp.sec;
1809     		time_uptime = fftimehands->tick_time_lerp.sec - ffclock_boottime.sec;

** CID 1512551:    (Y2K38_SAFETY)
/bsps/shared/dev/getentropy/getentropy-cpucounter.c: 74 in getentropy_init()
/bsps/shared/dev/getentropy/getentropy-cpucounter.c: 75 in getentropy_init()


________________________________________________________________________________________________________
*** CID 1512551:    (Y2K38_SAFETY)
/bsps/shared/dev/getentropy/getentropy-cpucounter.c: 74 in getentropy_init()
68     {
69       struct bintime bt;
70     
71       rtems_bsd_bintime(&bt);
72       state = (uint32_t) bt.frac;
73       state ^= (uint32_t) (bt.frac >> 32);
>>>     CID 1512551:    (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "bt.sec" is cast to "uint32_t".
74       state ^= (uint32_t) bt.sec;
75       state ^= (uint32_t) (bt.sec >> 32);
76     }
77     
78     RTEMS_SYSINIT_ITEM(
79       getentropy_init,
80       RTEMS_SYSINIT_DEVICE_DRIVERS,
81       RTEMS_SYSINIT_ORDER_LAST_BUT_5
/bsps/shared/dev/getentropy/getentropy-cpucounter.c: 75 in getentropy_init()
69       struct bintime bt;
70     
71       rtems_bsd_bintime(&bt);
72       state = (uint32_t) bt.frac;
73       state ^= (uint32_t) (bt.frac >> 32);
74       state ^= (uint32_t) bt.sec;
>>>     CID 1512551:    (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "bt.sec >> 32" is cast to "uint32_t".
75       state ^= (uint32_t) (bt.sec >> 32);
76     }
77     
78     RTEMS_SYSINIT_ITEM(
79       getentropy_init,
80       RTEMS_SYSINIT_DEVICE_DRIVERS,
81       RTEMS_SYSINIT_ORDER_LAST_BUT_5

** CID 1512550:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/gc.c: 878 in jffs2_garbage_collect_dirent()


________________________________________________________________________________________________________
*** CID 1512550:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/gc.c: 878 in jffs2_garbage_collect_dirent()
872     	rd.pino = cpu_to_je32(f->inocache->ino);
873     	rd.version = cpu_to_je32(++f->highest_version);
874     	rd.ino = cpu_to_je32(fd->ino);
875     	/* If the times on this inode were set by explicit utime() they can be different,
876     	   so refrain from splatting them. */
877     	if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f))
>>>     CID 1512550:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "((struct _inode *)((uintptr_t)f - 72U))->i_mtime" is cast to "__u32".
878     		rd.mctime = cpu_to_je32(JFFS2_F_I_MTIME(f));
879     	else
880     		rd.mctime = cpu_to_je32(0);
881     	rd.type = fd->type;
882     	rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8));
883     	rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize));

** CID 1512549:  High impact quality  (Y2K38_SAFETY)
/cpukit/score/src/kern_tc.c: 2384 in _Timecounter_Tick_simple()


________________________________________________________________________________________________________
*** CID 1512549:  High impact quality  (Y2K38_SAFETY)
/cpukit/score/src/kern_tc.c: 2384 in _Timecounter_Tick_simple()
2378     #else
2379     	atomic_store_rel_int(&th->th_generation, th->th_generation + 1);
2380     #endif
2381     
2382     	/* Go live with the new struct timehands. */
2383     	time_second = th->th_microtime.tv_sec;
>>>     CID 1512549:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "th->th_offset.sec" is cast to "int32_t".
2384     	time_uptime = th->th_offset.sec;
2385     
2386     	_Timecounter_Release(lock_context);
2387     
2388     	_Watchdog_Tick(_Per_CPU_Get_snapshot());
2389     }

** CID 1512548:  Incorrect expression  (PRECEDENCE_ERROR)
/cpukit/libdl/rtl-shell.c: 877 in rtems_rtl_shell_archive()


________________________________________________________________________________________________________
*** CID 1512548:  Incorrect expression  (PRECEDENCE_ERROR)
/cpukit/libdl/rtl-shell.c: 877 in rtems_rtl_shell_archive()
871             continue;
872           }
873         }
874     
875         rtems_printf (printer, "%s%c\n",
876                       archive->name,
>>>     CID 1512548:  Incorrect expression  (PRECEDENCE_ERROR)
>>>     Evaluates as: "(details | symbols | duplicates) ? <then> : <else>", because "|" has higher operator precedence than "?:". The context suggests that this might be in error.
877                       details | symbols | duplicates ? ':' : ' ');
878     
879         if (details)
880         {
881           rtems_printf (printer, "  size    : %zu\n", archive->size);
882           rtems_printf (printer, "  symbols : %zu\n", archive->symbols.entries);

** CID 1512547:  Integer handling issues  (BAD_SHIFT)
/cpukit/zlib/inflate.c: 225 in z_inflatePrime()


________________________________________________________________________________________________________
*** CID 1512547:  Integer handling issues  (BAD_SHIFT)
/cpukit/zlib/inflate.c: 225 in z_inflatePrime()
219             state->hold = 0;
220             state->bits = 0;
221             return Z_OK;
222         }
223         if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
224         value &= (1L << bits) - 1;
>>>     CID 1512547:  Integer handling issues  (BAD_SHIFT)
>>>     In expression "value << state->bits", left shifting by more than 31 bits has undefined behavior.  The shift amount, "state->bits", is as much as 32.
225         state->hold += value << state->bits;
226         state->bits += bits;
227         return Z_OK;
228     }
229     
230     /*

** CID 1512546:  High impact quality  (Y2K38_SAFETY)
/cpukit/score/src/schedulercbsreleasejob.c: 60 in _Scheduler_CBS_Release_job()


________________________________________________________________________________________________________
*** CID 1512546:  High impact quality  (Y2K38_SAFETY)
/cpukit/score/src/schedulercbsreleasejob.c: 60 in _Scheduler_CBS_Release_job()
54     
55       node = _Scheduler_CBS_Thread_get_node( the_thread );
56       serv_info = node->cbs_server;
57     
58       /* Budget replenishment for the next job. */
59       if ( serv_info != NULL ) {
>>>     CID 1512546:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "serv_info->parameters.budget" is cast to "uint32_t".
60         the_thread->CPU_budget.available = serv_info->parameters.budget;
61       }
62     
63       node->deadline_node = priority_node;
64     
65       _Scheduler_EDF_Release_job(

** CID 1512545:  Memory - illegal accesses  (UNINIT)


________________________________________________________________________________________________________
*** CID 1512545:  Memory - illegal accesses  (UNINIT)
/cpukit/libmisc/rtems-fdt/rtems-fdt.c: 664 in rtems_fdt_register()
658       blob->blob = dtb;
659       blob->name = NULL;
660       rtems_chain_initialize_node(&blob->node);
661     
662       fdt = rtems_fdt_lock ();
663     
>>>     CID 1512545:  Memory - illegal accesses  (UNINIT)
>>>     Using uninitialized value "blob->node.next" when calling "rtems_chain_append_unprotected".
664       rtems_chain_append_unprotected (&fdt->blobs, &blob->node);
665     
666       blob->refs = 1;
667     
668       rtems_fdt_unlock (fdt);
669     

** CID 1512544:  Memory - illegal accesses  (UNINIT)


________________________________________________________________________________________________________
*** CID 1512544:  Memory - illegal accesses  (UNINIT)
/cpukit/libcsupport/src/sup_fs_location.c: 98 in rtems_filesystem_location_transform_to_global()
92       rtems_filesystem_global_location_t *global_loc = malloc(sizeof(*global_loc));
93     
94       if (global_loc != NULL) {
95         global_loc->reference_count = 1;
96         global_loc->deferred_released_next = NULL;
97         global_loc->deferred_released_count = 0;
>>>     CID 1512544:  Memory - illegal accesses  (UNINIT)
>>>     Using uninitialized value "global_loc->location.mt_entry_node.next" when calling "rtems_filesystem_location_copy".
98         rtems_filesystem_location_copy(&global_loc->location, loc);
99         rtems_filesystem_location_remove_from_mt_entry(loc);
100       } else {
101         rtems_filesystem_location_free(loc);
102         global_loc = rtems_filesystem_global_location_obtain_null();
103         errno = ENOMEM;

** CID 1512543:  Memory - illegal accesses  (UNINIT)


________________________________________________________________________________________________________
*** CID 1512543:  Memory - illegal accesses  (UNINIT)
/cpukit/posix/src/pthreadcreate.c: 369 in _POSIX_Threads_Sporadic_timer()
363       }
364     
365       _Watchdog_Per_CPU_remove_ticks( &api->Sporadic.Timer );
366       _POSIX_Threads_Sporadic_timer_insert( the_thread, api );
367     
368       _Thread_Wait_release( the_thread, &queue_context );
>>>     CID 1512543:  Memory - illegal accesses  (UNINIT)
>>>     Using uninitialized element of array "queue_context.Priority.update" when calling "_Thread_Priority_update".
369       _Thread_Priority_update( &queue_context );
370     }
371     
372     static void _POSIX_Threads_Sporadic_budget_callout(
373       Thread_Control *the_thread
374     )

** CID 1512542:  Memory - corruptions  (OVERRUN)
/bsps/shared/ofw/ofw.c: 233 in rtems_ofw_get_prop()


________________________________________________________________________________________________________
*** CID 1512542:  Memory - corruptions  (OVERRUN)
/bsps/shared/ofw/ofw.c: 233 in rtems_ofw_get_prop()
227       if (prop == NULL) {
228         return -1;
229       }
230     
231       copy_len = MIN(len, bufsize);
232       _Assert(copy_len <= bufsize);
>>>     CID 1512542:  Memory - corruptions  (OVERRUN)
>>>     Calling "memmove" with "buf" and "copy_len" is suspicious because of the very large index, 4294967168. The index may be due to a negative parameter being interpreted as unsigned.
233       memmove(buf, prop, copy_len);
234     
235       return len;
236     }
237     
238     ssize_t rtems_ofw_get_enc_prop(

** CID 1512541:  Memory - illegal accesses  (UNINIT)


________________________________________________________________________________________________________
*** CID 1512541:  Memory - illegal accesses  (UNINIT)
/cpukit/libcsupport/src/fchdir.c: 74 in fchdir()
68           st.st_mode,
69           st.st_uid,
70           st.st_gid
71         );
72     
73         if ( access_ok ) {
>>>     CID 1512541:  Memory - illegal accesses  (UNINIT)
>>>     Using uninitialized value "loc.mt_entry_node.next" when calling "rtems_filesystem_location_clone".
74           rtems_filesystem_location_clone( &loc, &iop->pathinfo );
75         } else {
76           errno = EACCES;
77           rv = -1;
78         }
79       }

** CID 1512540:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/dir-rtems.c: 132 in jffs2_unlink()


________________________________________________________________________________________________________
*** CID 1512540:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/dir-rtems.c: 132 in jffs2_unlink()
126     	struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
127     	struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
128     	struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(d_inode);
129     	int ret;
130     
131     	ret = jffs2_do_unlink(c, dir_f, (const char *)d_name,
>>>     CID 1512540:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "time(NULL)" is cast to "uint32_t".
132     			       d_namelen, dead_f, get_seconds());
133     	if (dead_f->inocache)
134     		d_inode->i_nlink = dead_f->inocache->pino_nlink;
135     	return ret;
136     }
137     /***********************************************************************/

** CID 1512539:  High impact quality  (Y2K38_SAFETY)
/cpukit/libmisc/cpuuse/cpuusagetop.c: 146 in print_time()


________________________________________________________________________________________________________
*** CID 1512539:  High impact quality  (Y2K38_SAFETY)
/cpukit/libmisc/cpuuse/cpuusagetop.c: 146 in print_time()
140     
141     static int
142     print_time(rtems_cpu_usage_data*    data,
143                const Timestamp_Control* time,
144                const int                length)
145     {
>>>     CID 1512539:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "_Timestamp_Get_seconds(time)" is cast to "uint32_t".
146       uint32_t secs = _Timestamp_Get_seconds( time );
147       uint32_t usecs = _Timestamp_Get_nanoseconds( time ) / TOD_NANOSECONDS_PER_MICROSECOND;
148       int      len = 0;
149     
150       if (secs > 60)
151       {

** CID 1512538:  Memory - illegal accesses  (UNINIT)


________________________________________________________________________________________________________
*** CID 1512538:  Memory - illegal accesses  (UNINIT)
/cpukit/libcsupport/src/_rename_r.c: 64 in _rename_r()
58       int rv = 0;
59       rtems_filesystem_eval_path_context_t old_ctx;
60       int old_eval_flags = 0;
61       rtems_filesystem_location_info_t old_parentloc;
62       int old_parent_eval_flags = RTEMS_FS_PERMS_WRITE
63         | RTEMS_FS_FOLLOW_HARD_LINK;
>>>     CID 1512538:  Memory - illegal accesses  (UNINIT)
>>>     Using uninitialized value "old_parentloc.mt_entry_node.next" when calling "rtems_filesystem_eval_path_start_with_parent".
64       const rtems_filesystem_location_info_t *old_currentloc =
65         rtems_filesystem_eval_path_start_with_parent(
66           &old_ctx,
67           old,
68           old_eval_flags,
69           &old_parentloc,

** CID 1512537:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/dir-rtems.c: 285 in jffs2_mknod()


________________________________________________________________________________________________________
*** CID 1512537:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/dir-rtems.c: 285 in jffs2_mknod()
279     	rd->totlen = cpu_to_je32(sizeof(*rd) + d_namelen);
280     	rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
281     
282     	rd->pino = cpu_to_je32(dir_i->i_ino);
283     	rd->version = cpu_to_je32(++dir_f->highest_version);
284     	rd->ino = cpu_to_je32(inode->i_ino);
>>>     CID 1512537:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "time(NULL)" is cast to "__u32".
285     	rd->mctime = cpu_to_je32(get_seconds());
286     	rd->nsize = d_namelen;
287     
288     	/* XXX: This is ugly. */
289     	rd->type = (mode & S_IFMT) >> 12;
290     

** CID 1512536:  Memory - corruptions  (OVERRUN)


________________________________________________________________________________________________________
*** CID 1512536:  Memory - corruptions  (OVERRUN)
/cpukit/posix/src/pthreadcreate.c: 257 in pthread_create()
251         return EAGAIN;
252       }
253     
254       /*
255        *  Initialize the core thread for this task.
256        */
>>>     CID 1512536:  Memory - corruptions  (OVERRUN)
>>>     Calling "_Thread_Initialize" with "config.stack_area" and "config.stack_size" is suspicious because of the very large index, 4294967295. The index may be due to a negative parameter being interpreted as unsigned.
257       status = _Thread_Initialize(
258         &_POSIX_Threads_Information,
259         the_thread,
260         &config
261       );
262       if ( status != STATUS_SUCCESSFUL ) {

** CID 1512535:  High impact quality  (Y2K38_SAFETY)
/cpukit/mghttpd/mongoose.c: 2608 in send_authorization_request()


________________________________________________________________________________________________________
*** CID 1512535:  High impact quality  (Y2K38_SAFETY)
/cpukit/mghttpd/mongoose.c: 2608 in send_authorization_request()
2602       mg_printf(conn,
2603                 "HTTP/1.1 401 Unauthorized\r\n"
2604                 "Content-Length: 0\r\n"
2605                 "WWW-Authenticate: Digest qop=\"auth\", "
2606                 "realm=\"%s\", nonce=\"%lu\"\r\n\r\n",
2607                 conn->ctx->config[AUTHENTICATION_DOMAIN],
>>>     CID 1512535:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "time(NULL)" is cast to "unsigned long".
2608                 (unsigned long) time(NULL));
2609     }
2610     
2611     static int is_authorized_for_put(struct mg_connection *conn) {
2612       struct file file = STRUCT_FILE_INITIALIZER;
2613       const char *passfile = conn->ctx->config[PUT_DELETE_PASSWORDS_FILE];

** CID 1512534:  Memory - illegal accesses  (UNINIT)


________________________________________________________________________________________________________
*** CID 1512534:  Memory - illegal accesses  (UNINIT)
/cpukit/libcsupport/src/printertask.c: 219 in rtems_printer_task_drain()
213       printer_task_buffer buffer;
214     
215       rtems_chain_initialize_node( &buffer.node );
216       buffer.action_kind = ACTION_DRAIN;
217       buffer.action_data.task = rtems_task_self();
218     
>>>     CID 1512534:  Memory - illegal accesses  (UNINIT)
>>>     Using uninitialized value "buffer.node.next" when calling "printer_task_append_buffer".
219       printer_task_append_buffer( ctx, &ctx->todo_buffers, &buffer );
220       rtems_event_send( ctx->task, PRINT_TASK_WAKE_UP );
221       rtems_event_transient_receive( RTEMS_WAIT, RTEMS_NO_TIMEOUT );

** CID 1512533:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/dir-rtems.c: 385 in jffs2_rename()


________________________________________________________________________________________________________
*** CID 1512533:  High impact quality  (Y2K38_SAFETY)
/cpukit/libfs/src/jffs2/src/dir-rtems.c: 385 in jffs2_rename()
379     	/* Make a hard link */
380     
381     	/* XXX: This is ugly */
382     	type = (d_inode->i_mode & S_IFMT) >> 12;
383     	if (!type) type = DT_REG;
384     
>>>     CID 1512533:  High impact quality  (Y2K38_SAFETY)
>>>     A "time_t" value is stored in an integer with too few bits to accommodate it.  The expression "time(NULL)" is cast to "uint32_t".
385     	now = get_seconds();
386     	ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
387     			    d_inode->i_ino, type,
388     			    (const char *)new_d_name,
389                                 new_d_namelen, now);
390     


________________________________________________________________________________________________________
To view the defects in Coverity Scan visit, https://u15810271.ct.sendgrid.net/ls/click?upn=HRESupC-2F2Czv4BOaCWWCy7my0P0qcxCbhZ31OYv50ypUUzi-2FdSNmuyRB7BEFT8xQ4-2B8hpujh0hTgQljRGId4Dg-3D-3DkGkW_EU3W9teASMK00lBXX9WT4lsogDrkCcNZLvg-2FVxwAXMrOEZN-2BLUspARgYtiBqgHjzYVpaMXnc-2BLCLwhp1aWEHLF62YhIqEogAZ1zLsjPeB26DwhbGlA7CD9U7GFZ3MPXT9E7SOH6ZheIR0qSxbzkw5LrJaANPQMkrFAZ0WSxupw6q8aKgrnyDCRc3ulhtIN0qN1ay-2FBjeF29FT-2BfQMJgbJQ-3D-3D



More information about the build mailing list