Skip to content

Commit 10b089a

Browse files
committed
fix: remove unsafe tmpnam usage
Signed-off-by: Felipe Zipitria <[email protected]>
1 parent 30c909c commit 10b089a

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

apache2/modsecurity.c

+18-5
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,12 @@ msc_engine *modsecurity_create(apr_pool_t *mp, int processing_mode) {
129129
*/
130130
int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
131131
apr_status_t rc;
132+
apr_file_t *auditlog_lock_name;
133+
apr_file_t *geo_lock_name;
134+
apr_file_t *dbm_lock_name;
135+
136+
// use temp path template for lock files
137+
char *path = apr_pstrcat(p, temp_dir, "/modsec-lock-tmp.XXXXXX", NULL);
132138

133139
msce->auditlog_lock = msce->geo_lock = NULL;
134140
#ifdef GLOBAL_COLLECTION_LOCK
@@ -146,11 +152,12 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
146152
curl_global_init(CURL_GLOBAL_ALL);
147153
#endif
148154
/* Serial audit log mutext */
149-
tmpnam(auditlog_lock_name);
155+
rc = apr_file_mktemp(&auditlog_lock_name, path, 0, p)
156+
if (rc != APR_SUCCESS) {
157+
return -1
158+
}
150159
rc = apr_global_mutex_create(&msce->auditlog_lock, auditlog_lock_name, APR_LOCK_DEFAULT, mp);
151160
if (rc != APR_SUCCESS) {
152-
//ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, "mod_security: Could not create modsec_auditlog_lock");
153-
//return HTTP_INTERNAL_SERVER_ERROR;
154161
return -1;
155162
}
156163

@@ -168,7 +175,10 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
168175
}
169176
#endif /* SET_MUTEX_PERMS */
170177

171-
tmpnam(geo_lock_name);
178+
rc = apr_file_mktemp(&geo_lock_name, path, 0, p)
179+
if (rc != APR_SUCCESS) {
180+
return -1
181+
}
172182
rc = apr_global_mutex_create(&msce->geo_lock, geo_lock_name, APR_LOCK_DEFAULT, mp);
173183
if (rc != APR_SUCCESS) {
174184
return -1;
@@ -186,7 +196,10 @@ int modsecurity_init(msc_engine *msce, apr_pool_t *mp) {
186196
#endif /* SET_MUTEX_PERMS */
187197

188198
#ifdef GLOBAL_COLLECTION_LOCK
189-
tmpnam(dbm_lock_name);
199+
rc = apr_file_mktemp(&dbm_lock_name, path, 0, p)
200+
if (rc != APR_SUCCESS) {
201+
return -1
202+
}
190203
rc = apr_global_mutex_create(&msce->dbm_lock, dbm_lock_name, APR_LOCK_DEFAULT, mp);
191204
if (rc != APR_SUCCESS) {
192205
return -1;

0 commit comments

Comments
 (0)