Skip to content

Commit e390118

Browse files
committed
Merge pull request #1123 from ColinIanKing/rpi-4.1.y
vchiq: fix NULL pointer dereference when closing driver
2 parents c8baa97 + a4c376d commit e390118

File tree

6 files changed

+10
-9
lines changed

6 files changed

+10
-9
lines changed

drivers/char/broadcom/vc_sm/vmcs_sm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1368,8 +1368,8 @@ static int vc_sm_mmap(struct file *file, struct vm_area_struct *vma)
13681368
return 0;
13691369

13701370
error:
1371-
vmcs_sm_release_resource(resource, 0);
13721371
resource->res_stats[MAP_FAIL]++;
1372+
vmcs_sm_release_resource(resource, 0);
13731373
return ret;
13741374
}
13751375

drivers/media/platform/bcm2835/controls.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,8 @@ static int ctrl_set_scene_mode(struct bm2835_mmal_dev *dev,
845845
break;
846846
}
847847
}
848+
if (!scene)
849+
return -EINVAL;
848850
if (i >= ARRAY_SIZE(scene_configs))
849851
return -EINVAL;
850852

drivers/media/platform/bcm2835/mmal-vchiq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ static int port_info_set(struct vchiq_mmal_instance *instance,
851851
sizeof(union mmal_es_specific_format));
852852

853853
m.u.port_info_set.format.extradata_size = port->format.extradata_size;
854-
memcpy(rmsg->u.port_info_set.extradata, port->format.extradata,
854+
memcpy(&m.u.port_info_set.extradata, port->format.extradata,
855855
port->format.extradata_size);
856856

857857
ret = send_synchronous_mmal_msg(instance, &m,

drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ int vchiu_queue_init(VCHIU_QUEUE_T *queue, int size)
4646
queue->size = size;
4747
queue->read = 0;
4848
queue->write = 0;
49+
queue->initialized = 1;
4950

5051
sema_init(&queue->pop, 0);
5152
sema_init(&queue->push, 0);
@@ -76,6 +77,9 @@ int vchiu_queue_is_full(VCHIU_QUEUE_T *queue)
7677

7778
void vchiu_queue_push(VCHIU_QUEUE_T *queue, VCHIQ_HEADER_T *header)
7879
{
80+
if (!queue->initialized)
81+
return;
82+
7983
while (queue->write == queue->read + queue->size) {
8084
if (down_interruptible(&queue->pop) != 0) {
8185
flush_signals(current);

drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ typedef struct {
6060
int size;
6161
int read;
6262
int write;
63+
int initialized;
6364

6465
struct semaphore pop;
6566
struct semaphore push;

drivers/video/fbdev/bcm2708_fb.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,6 @@ static int bcm2708_fb_check_var(struct fb_var_screeninfo *var,
263263
if (var->yoffset > var->yres_virtual - var->yres)
264264
var->yoffset = var->yres_virtual - var->yres - 1;
265265

266-
yres = var->yres;
267-
if (var->vmode & FB_VMODE_DOUBLE)
268-
yres *= 2;
269-
else if (var->vmode & FB_VMODE_INTERLACED)
270-
yres = (yres + 1) / 2;
271-
272266
return 0;
273267
}
274268

@@ -426,7 +420,7 @@ static int bcm2708_fb_blank(int blank_mode, struct fb_info *info)
426420

427421
static int bcm2708_fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
428422
{
429-
s32 result = -1;
423+
s32 result;
430424
info->var.xoffset = var->xoffset;
431425
info->var.yoffset = var->yoffset;
432426
result = bcm2708_fb_set_par(info);

0 commit comments

Comments
 (0)