diff -urpN --exclude-from=/home/davej/.exclude bk-linus/drivers/media/video/stradis.c linux-2.5/drivers/media/video/stradis.c --- bk-linus/drivers/media/video/stradis.c 2002-11-21 02:15:45.000000000 +0000 +++ linux-2.5/drivers/media/video/stradis.c 2002-11-21 17:58:56.000000000 +0000 @@ -1428,6 +1428,9 @@ static int saa_ioctl(struct video_device if (copy_from_user(saa->dmavid2, vw.clips, VIDEO_CLIPMAP_SIZE)) return -EFAULT; + } + else if (vw.clipcount > 16384) { + return -EINVAL; } else if (vw.clipcount > 0) { if ((vcp = vmalloc(sizeof(struct video_clip) * (vw.clipcount))) == NULL) @@ -1946,7 +1949,9 @@ static int saa_open(struct video_device { struct saa7146 *saa = (struct saa7146 *) dev; - saa->video_dev.busy = 0; + /* FIXME: Don't do it this way, use the video_device->fops + * registration for a sane implementation of multiple opens */ + saa->video_dev.users--; saa->user++; if (saa->user > 1) return 0; /* device open already, don't reset */ @@ -1958,7 +1963,7 @@ static void saa_close(struct video_devic { struct saa7146 *saa = (struct saa7146 *) dev; saa->user--; - saa->video_dev.busy = 0; + saa->video_dev.users++; if (saa->user > 0) /* still someone using device */ return; saawrite(0x007f0000, SAA7146_MC1); /* stop all overlay dma */