Skip to content

Commit 96622d5

Browse files
t-8chgregkh
authored andcommitted
staging: vchiq_arm: Don't use %pK through printk
In the past %pK was preferable to %p as it would not leak raw pointer values into the kernel log. Since commit ad67b74 ("printk: hash addresses printed with %p") the regular %p has been improved to avoid this issue. Furthermore, restricted pointers ("%pK") were never meant to be used through printk(). They can still unintentionally leak raw pointers or acquire sleeping looks in atomic contexts. Switch to the regular pointer formatting which is safer and easier to reason about. There are still a few users of %pK left, but these use it through seq_file, for which its usage is safe. Link: https://lore.kernel.org/lkml/20250113171731-dc10e3c1-da64-4af0-b767-7c7070468023@linutronix.de/ Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Link: https://lore.kernel.org/r/20250311-restricted-pointers-vchiq_arm-v2-1-a14e1c0681fc@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent b2a9a6a commit 96622d5

File tree

3 files changed

+42
-42
lines changed

3 files changed

+42
-42
lines changed

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ static int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state
271271
return -ENXIO;
272272
}
273273

274-
dev_dbg(&pdev->dev, "arm: vchiq_init - done (slots %pK, phys %pad)\n",
274+
dev_dbg(&pdev->dev, "arm: vchiq_init - done (slots %p, phys %pad)\n",
275275
vchiq_slot_zero, &slot_phys);
276276

277277
mutex_init(&drv_mgmt->connected_mutex);
@@ -368,7 +368,7 @@ void free_bulk_waiter(struct vchiq_instance *instance)
368368
&instance->bulk_waiter_list, list) {
369369
list_del(&waiter->list);
370370
dev_dbg(instance->state->dev,
371-
"arm: bulk_waiter - cleaned up %pK for pid %d\n",
371+
"arm: bulk_waiter - cleaned up %p for pid %d\n",
372372
waiter, waiter->pid);
373373
kfree(waiter);
374374
}
@@ -622,7 +622,7 @@ vchiq_blocking_bulk_transfer(struct vchiq_instance *instance, unsigned int handl
622622
mutex_lock(&instance->bulk_waiter_list_mutex);
623623
list_add(&waiter->list, &instance->bulk_waiter_list);
624624
mutex_unlock(&instance->bulk_waiter_list_mutex);
625-
dev_dbg(instance->state->dev, "arm: saved bulk_waiter %pK for pid %d\n",
625+
dev_dbg(instance->state->dev, "arm: saved bulk_waiter %p for pid %d\n",
626626
waiter, current->pid);
627627
}
628628

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ make_service_callback(struct vchiq_service *service, enum vchiq_reason reason,
470470
cb_userdata = bulk->cb_userdata;
471471
}
472472

473-
dev_dbg(service->state->dev, "core: %d: callback:%d (%s, %pK, %pK %pK)\n",
473+
dev_dbg(service->state->dev, "core: %d: callback:%d (%s, %p, %p %p)\n",
474474
service->state->id, service->localport, reason_names[reason],
475475
header, cb_data, cb_userdata);
476476
status = service->base.callback(service->instance, reason, header, service->handle,
@@ -778,7 +778,7 @@ process_free_data_message(struct vchiq_state *state, u32 *service_found,
778778
complete(&quota->quota_event);
779779
} else if (count == 0) {
780780
dev_err(state->dev,
781-
"core: service %d message_use_count=%d (header %pK, msgid %x, header->msgid %x, header->size %x)\n",
781+
"core: service %d message_use_count=%d (header %p, msgid %x, header->msgid %x, header->size %x)\n",
782782
port, quota->message_use_count, header, msgid,
783783
header->msgid, header->size);
784784
WARN(1, "invalid message use count\n");
@@ -799,11 +799,11 @@ process_free_data_message(struct vchiq_state *state, u32 *service_found,
799799
* it has dropped below its quota
800800
*/
801801
complete(&quota->quota_event);
802-
dev_dbg(state->dev, "core: %d: pfq:%d %x@%pK - slot_use->%d\n",
802+
dev_dbg(state->dev, "core: %d: pfq:%d %x@%p - slot_use->%d\n",
803803
state->id, port, header->size, header, count - 1);
804804
} else {
805805
dev_err(state->dev,
806-
"core: service %d slot_use_count=%d (header %pK, msgid %x, header->msgid %x, header->size %x)\n",
806+
"core: service %d slot_use_count=%d (header %p, msgid %x, header->msgid %x, header->size %x)\n",
807807
port, count, header, msgid, header->msgid, header->size);
808808
WARN(1, "bad slot use count\n");
809809
}
@@ -845,7 +845,7 @@ process_free_queue(struct vchiq_state *state, u32 *service_found,
845845
*/
846846
rmb();
847847

848-
dev_dbg(state->dev, "core: %d: pfq %d=%pK %x %x\n",
848+
dev_dbg(state->dev, "core: %d: pfq %d=%p %x %x\n",
849849
state->id, slot_index, data, local->slot_queue_recycle,
850850
slot_queue_available);
851851

@@ -868,7 +868,7 @@ process_free_queue(struct vchiq_state *state, u32 *service_found,
868868
pos += calc_stride(header->size);
869869
if (pos > VCHIQ_SLOT_SIZE) {
870870
dev_err(state->dev,
871-
"core: pfq - pos %x: header %pK, msgid %x, header->msgid %x, header->size %x\n",
871+
"core: pfq - pos %x: header %p, msgid %x, header->msgid %x, header->size %x\n",
872872
pos, header, msgid, header->msgid, header->size);
873873
WARN(1, "invalid slot position\n");
874874
}
@@ -1060,7 +1060,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
10601060
int tx_end_index;
10611061
int slot_use_count;
10621062

1063-
dev_dbg(state->dev, "core: %d: qm %s@%pK,%zx (%d->%d)\n",
1063+
dev_dbg(state->dev, "core: %d: qm %s@%p,%zx (%d->%d)\n",
10641064
state->id, msg_type_str(VCHIQ_MSG_TYPE(msgid)), header, size,
10651065
VCHIQ_MSG_SRCPORT(msgid), VCHIQ_MSG_DSTPORT(msgid));
10661066

@@ -1117,7 +1117,7 @@ queue_message(struct vchiq_state *state, struct vchiq_service *service,
11171117
VCHIQ_SERVICE_STATS_INC(service, ctrl_tx_count);
11181118
VCHIQ_SERVICE_STATS_ADD(service, ctrl_tx_bytes, size);
11191119
} else {
1120-
dev_dbg(state->dev, "core: %d: qm %s@%pK,%zx (%d->%d)\n",
1120+
dev_dbg(state->dev, "core: %d: qm %s@%p,%zx (%d->%d)\n",
11211121
state->id, msg_type_str(VCHIQ_MSG_TYPE(msgid)), header, size,
11221122
VCHIQ_MSG_SRCPORT(msgid), VCHIQ_MSG_DSTPORT(msgid));
11231123
if (size != 0) {
@@ -1204,7 +1204,7 @@ queue_message_sync(struct vchiq_state *state, struct vchiq_service *service,
12041204
state->id, oldmsgid);
12051205
}
12061206

1207-
dev_dbg(state->dev, "sync: %d: qms %s@%pK,%x (%d->%d)\n",
1207+
dev_dbg(state->dev, "sync: %d: qms %s@%p,%x (%d->%d)\n",
12081208
state->id, msg_type_str(VCHIQ_MSG_TYPE(msgid)), header, size,
12091209
VCHIQ_MSG_SRCPORT(msgid), VCHIQ_MSG_DSTPORT(msgid));
12101210

@@ -1539,7 +1539,7 @@ create_pagelist(struct vchiq_instance *instance, struct vchiq_bulk *bulk)
15391539
pagelist = dma_alloc_coherent(instance->state->dev, pagelist_size, &dma_addr,
15401540
GFP_KERNEL);
15411541

1542-
dev_dbg(instance->state->dev, "arm: %pK\n", pagelist);
1542+
dev_dbg(instance->state->dev, "arm: %p\n", pagelist);
15431543

15441544
if (!pagelist)
15451545
return NULL;
@@ -1692,7 +1692,7 @@ free_pagelist(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagel
16921692
unsigned int num_pages = pagelistinfo->num_pages;
16931693
unsigned int cache_line_size;
16941694

1695-
dev_dbg(instance->state->dev, "arm: %pK, %d\n", pagelistinfo->pagelist, actual);
1695+
dev_dbg(instance->state->dev, "arm: %p, %d\n", pagelistinfo->pagelist, actual);
16961696

16971697
drv_mgmt = dev_get_drvdata(instance->state->dev);
16981698

@@ -1849,7 +1849,7 @@ parse_open(struct vchiq_state *state, struct vchiq_header *header)
18491849

18501850
payload = (struct vchiq_open_payload *)header->data;
18511851
fourcc = payload->fourcc;
1852-
dev_dbg(state->dev, "core: %d: prs OPEN@%pK (%d->'%p4cc')\n",
1852+
dev_dbg(state->dev, "core: %d: prs OPEN@%p (%d->'%p4cc')\n",
18531853
state->id, header, localport, &fourcc);
18541854

18551855
service = get_listening_service(state, fourcc);
@@ -1976,14 +1976,14 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
19761976
service = get_connected_service(state, remoteport);
19771977
if (service)
19781978
dev_warn(state->dev,
1979-
"core: %d: prs %s@%pK (%d->%d) - found connected service %d\n",
1979+
"core: %d: prs %s@%p (%d->%d) - found connected service %d\n",
19801980
state->id, msg_type_str(type), header,
19811981
remoteport, localport, service->localport);
19821982
}
19831983

19841984
if (!service) {
19851985
dev_err(state->dev,
1986-
"core: %d: prs %s@%pK (%d->%d) - invalid/closed service %d\n",
1986+
"core: %d: prs %s@%p (%d->%d) - invalid/closed service %d\n",
19871987
state->id, msg_type_str(type), header, remoteport,
19881988
localport, localport);
19891989
goto skip_message;
@@ -2003,7 +2003,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
20032003

20042004
if (((unsigned long)header & VCHIQ_SLOT_MASK) +
20052005
calc_stride(size) > VCHIQ_SLOT_SIZE) {
2006-
dev_err(state->dev, "core: header %pK (msgid %x) - size %x too big for slot\n",
2006+
dev_err(state->dev, "core: header %p (msgid %x) - size %x too big for slot\n",
20072007
header, (unsigned int)msgid, (unsigned int)size);
20082008
WARN(1, "oversized for slot\n");
20092009
}
@@ -2022,7 +2022,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
20222022
service->peer_version = payload->version;
20232023
}
20242024
dev_dbg(state->dev,
2025-
"core: %d: prs OPENACK@%pK,%x (%d->%d) v:%d\n",
2025+
"core: %d: prs OPENACK@%p,%x (%d->%d) v:%d\n",
20262026
state->id, header, size, remoteport, localport,
20272027
service->peer_version);
20282028
if (service->srvstate == VCHIQ_SRVSTATE_OPENING) {
@@ -2037,7 +2037,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
20372037
case VCHIQ_MSG_CLOSE:
20382038
WARN_ON(size); /* There should be no data */
20392039

2040-
dev_dbg(state->dev, "core: %d: prs CLOSE@%pK (%d->%d)\n",
2040+
dev_dbg(state->dev, "core: %d: prs CLOSE@%p (%d->%d)\n",
20412041
state->id, header, remoteport, localport);
20422042

20432043
mark_service_closing_internal(service, 1);
@@ -2049,7 +2049,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
20492049
&service->base.fourcc, service->localport, service->remoteport);
20502050
break;
20512051
case VCHIQ_MSG_DATA:
2052-
dev_dbg(state->dev, "core: %d: prs DATA@%pK,%x (%d->%d)\n",
2052+
dev_dbg(state->dev, "core: %d: prs DATA@%p,%x (%d->%d)\n",
20532053
state->id, header, size, remoteport, localport);
20542054

20552055
if ((service->remoteport == remoteport) &&
@@ -2069,7 +2069,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
20692069
}
20702070
break;
20712071
case VCHIQ_MSG_CONNECT:
2072-
dev_dbg(state->dev, "core: %d: prs CONNECT@%pK\n",
2072+
dev_dbg(state->dev, "core: %d: prs CONNECT@%p\n",
20732073
state->id, header);
20742074
state->version_common = ((struct vchiq_slot_zero *)
20752075
state->slot_data)->version;
@@ -2102,7 +2102,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
21022102
if ((int)(queue->remote_insert -
21032103
queue->local_insert) >= 0) {
21042104
dev_err(state->dev,
2105-
"core: %d: prs %s@%pK (%d->%d) unexpected (ri=%d,li=%d)\n",
2105+
"core: %d: prs %s@%p (%d->%d) unexpected (ri=%d,li=%d)\n",
21062106
state->id, msg_type_str(type), header, remoteport,
21072107
localport, queue->remote_insert, queue->local_insert);
21082108
mutex_unlock(&service->bulk_mutex);
@@ -2120,7 +2120,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
21202120
bulk->actual = *(int *)header->data;
21212121
queue->remote_insert++;
21222122

2123-
dev_dbg(state->dev, "core: %d: prs %s@%pK (%d->%d) %x@%pad\n",
2123+
dev_dbg(state->dev, "core: %d: prs %s@%p (%d->%d) %x@%pad\n",
21242124
state->id, msg_type_str(type), header, remoteport,
21252125
localport, bulk->actual, &bulk->dma_addr);
21262126

@@ -2140,12 +2140,12 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
21402140
}
21412141
break;
21422142
case VCHIQ_MSG_PADDING:
2143-
dev_dbg(state->dev, "core: %d: prs PADDING@%pK,%x\n",
2143+
dev_dbg(state->dev, "core: %d: prs PADDING@%p,%x\n",
21442144
state->id, header, size);
21452145
break;
21462146
case VCHIQ_MSG_PAUSE:
21472147
/* If initiated, signal the application thread */
2148-
dev_dbg(state->dev, "core: %d: prs PAUSE@%pK,%x\n",
2148+
dev_dbg(state->dev, "core: %d: prs PAUSE@%p,%x\n",
21492149
state->id, header, size);
21502150
if (state->conn_state == VCHIQ_CONNSTATE_PAUSED) {
21512151
dev_err(state->dev, "core: %d: PAUSE received in state PAUSED\n",
@@ -2162,7 +2162,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
21622162
vchiq_set_conn_state(state, VCHIQ_CONNSTATE_PAUSED);
21632163
break;
21642164
case VCHIQ_MSG_RESUME:
2165-
dev_dbg(state->dev, "core: %d: prs RESUME@%pK,%x\n",
2165+
dev_dbg(state->dev, "core: %d: prs RESUME@%p,%x\n",
21662166
state->id, header, size);
21672167
/* Release the slot mutex */
21682168
mutex_unlock(&state->slot_mutex);
@@ -2179,7 +2179,7 @@ parse_message(struct vchiq_state *state, struct vchiq_header *header)
21792179
break;
21802180

21812181
default:
2182-
dev_err(state->dev, "core: %d: prs invalid msgid %x@%pK,%x\n",
2182+
dev_err(state->dev, "core: %d: prs invalid msgid %x@%p,%x\n",
21832183
state->id, msgid, header, size);
21842184
WARN(1, "invalid message\n");
21852185
break;
@@ -2400,7 +2400,7 @@ sync_func(void *v)
24002400

24012401
if (!service) {
24022402
dev_err(state->dev,
2403-
"sync: %d: sf %s@%pK (%d->%d) - invalid/closed service %d\n",
2403+
"sync: %d: sf %s@%p (%d->%d) - invalid/closed service %d\n",
24042404
state->id, msg_type_str(type), header, remoteport,
24052405
localport, localport);
24062406
release_message_sync(state, header);
@@ -2422,7 +2422,7 @@ sync_func(void *v)
24222422
header->data;
24232423
service->peer_version = payload->version;
24242424
}
2425-
dev_err(state->dev, "sync: %d: sf OPENACK@%pK,%x (%d->%d) v:%d\n",
2425+
dev_err(state->dev, "sync: %d: sf OPENACK@%p,%x (%d->%d) v:%d\n",
24262426
state->id, header, size, remoteport, localport,
24272427
service->peer_version);
24282428
if (service->srvstate == VCHIQ_SRVSTATE_OPENING) {
@@ -2435,7 +2435,7 @@ sync_func(void *v)
24352435
break;
24362436

24372437
case VCHIQ_MSG_DATA:
2438-
dev_dbg(state->dev, "sync: %d: sf DATA@%pK,%x (%d->%d)\n",
2438+
dev_dbg(state->dev, "sync: %d: sf DATA@%p,%x (%d->%d)\n",
24392439
state->id, header, size, remoteport, localport);
24402440

24412441
if ((service->remoteport == remoteport) &&
@@ -2449,7 +2449,7 @@ sync_func(void *v)
24492449
break;
24502450

24512451
default:
2452-
dev_err(state->dev, "sync: error: %d: sf unexpected msgid %x@%pK,%x\n",
2452+
dev_err(state->dev, "sync: error: %d: sf unexpected msgid %x@%p,%x\n",
24532453
state->id, msgid, header, size);
24542454
release_message_sync(state, header);
24552455
break;
@@ -2926,13 +2926,13 @@ release_service_messages(struct vchiq_service *service)
29262926
int port = VCHIQ_MSG_DSTPORT(msgid);
29272927

29282928
if ((port == service->localport) && (msgid & VCHIQ_MSGID_CLAIMED)) {
2929-
dev_dbg(state->dev, "core: fsi - hdr %pK\n", header);
2929+
dev_dbg(state->dev, "core: fsi - hdr %p\n", header);
29302930
release_slot(state, slot_info, header, NULL);
29312931
}
29322932
pos += calc_stride(header->size);
29332933
if (pos > VCHIQ_SLOT_SIZE) {
29342934
dev_err(state->dev,
2935-
"core: fsi - pos %x: header %pK, msgid %x, header->msgid %x, header->size %x\n",
2935+
"core: fsi - pos %x: header %p, msgid %x, header->msgid %x, header->size %x\n",
29362936
pos, header, msgid, header->msgid, header->size);
29372937
WARN(1, "invalid slot position\n");
29382938
}
@@ -3091,7 +3091,7 @@ vchiq_bulk_xfer_queue_msg_killable(struct vchiq_service *service,
30913091
*/
30923092
wmb();
30933093

3094-
dev_dbg(state->dev, "core: %d: bt (%d->%d) %cx %x@%pad %pK\n",
3094+
dev_dbg(state->dev, "core: %d: bt (%d->%d) %cx %x@%pad %p\n",
30953095
state->id, service->localport, service->remoteport,
30963096
dir_char, bulk->size, &bulk->dma_addr, bulk->cb_data);
30973097

drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ static int vchiq_ioc_dequeue_message(struct vchiq_instance *instance,
270270
}
271271
} else {
272272
dev_err(service->state->dev,
273-
"arm: header %pK: bufsize %x < size %x\n",
273+
"arm: header %p: bufsize %x < size %x\n",
274274
header, args->bufsize, header->size);
275275
WARN(1, "invalid size\n");
276276
ret = -EMSGSIZE;
@@ -328,7 +328,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
328328
ret = -ESRCH;
329329
goto out;
330330
}
331-
dev_dbg(service->state->dev, "arm: found bulk_waiter %pK for pid %d\n",
331+
dev_dbg(service->state->dev, "arm: found bulk_waiter %p for pid %d\n",
332332
waiter, current->pid);
333333

334334
status = vchiq_bulk_xfer_waiting(instance, args->handle,
@@ -366,7 +366,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
366366
mutex_lock(&instance->bulk_waiter_list_mutex);
367367
list_add(&waiter->list, &instance->bulk_waiter_list);
368368
mutex_unlock(&instance->bulk_waiter_list_mutex);
369-
dev_dbg(service->state->dev, "arm: saved bulk_waiter %pK for pid %d\n",
369+
dev_dbg(service->state->dev, "arm: saved bulk_waiter %p for pid %d\n",
370370
waiter, current->pid);
371371

372372
ret = put_user(mode_waiting, mode);
@@ -512,7 +512,7 @@ static int vchiq_ioc_await_completion(struct vchiq_instance *instance,
512512
/* This must be a VCHIQ-style service */
513513
if (args->msgbufsize < msglen) {
514514
dev_err(service->state->dev,
515-
"arm: header %pK: msgbufsize %x < msglen %x\n",
515+
"arm: header %p: msgbufsize %x < msglen %x\n",
516516
header, args->msgbufsize, msglen);
517517
WARN(1, "invalid message size\n");
518518
if (ret == 0)
@@ -588,7 +588,7 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
588588
long ret = 0;
589589
int i, rc;
590590

591-
dev_dbg(instance->state->dev, "arm: instance %pK, cmd %s, arg %lx\n", instance,
591+
dev_dbg(instance->state->dev, "arm: instance %p, cmd %s, arg %lx\n", instance,
592592
((_IOC_TYPE(cmd) == VCHIQ_IOC_MAGIC) && (_IOC_NR(cmd) <= VCHIQ_IOC_MAX)) ?
593593
ioctl_names[_IOC_NR(cmd)] : "<invalid>", arg);
594594

@@ -874,12 +874,12 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
874874

875875
if (!status && (ret < 0) && (ret != -EINTR) && (ret != -EWOULDBLOCK)) {
876876
dev_dbg(instance->state->dev,
877-
"arm: ioctl instance %pK, cmd %s -> status %d, %ld\n",
877+
"arm: ioctl instance %p, cmd %s -> status %d, %ld\n",
878878
instance, (_IOC_NR(cmd) <= VCHIQ_IOC_MAX) ?
879879
ioctl_names[_IOC_NR(cmd)] : "<invalid>", status, ret);
880880
} else {
881881
dev_dbg(instance->state->dev,
882-
"arm: ioctl instance %pK, cmd %s -> status %d\n, %ld\n",
882+
"arm: ioctl instance %p, cmd %s -> status %d\n, %ld\n",
883883
instance, (_IOC_NR(cmd) <= VCHIQ_IOC_MAX) ?
884884
ioctl_names[_IOC_NR(cmd)] : "<invalid>", status, ret);
885885
}

0 commit comments

Comments
 (0)