int i, nr_unpin = 0, nr_win = 0;
bool skip_flip = false;
+ BUG_ON(win_num > DC_N_WINDOWS);
for (i = 0; i < win_num; i++) {
struct tegra_dc_ext_flip_win *flip_win = &data->win[i];
int index = flip_win->attr.index;
spin_unlock(&flip_callback_lock);
}
- for (i = 0; i < DC_N_WINDOWS; i++) {
+ for (i = 0; i < win_num; i++) {
struct tegra_dc_ext_flip_win *flip_win = &data->win[i];
int index = flip_win->attr.index;
u8 idx_mask = 0;
int i;
+ BUG_ON(win_num > DC_N_WINDOWS);
for (i = 0; i < win_num; i++) {
int index = win[i].index;
u8 idx_mask = 0;
int i;
-
+ BUG_ON(win_num > DC_N_WINDOWS);
for (i = 0; i < win_num; i++) {
int index = win[i].index;
{
int i, used_windows = 0;
+ if (win_num > DC_N_WINDOWS)
+ return -EINVAL;
+
for (i = 0; i < win_num; i++) {
int index = win[i].index;
data->ext = ext;
data->act_window_num = win_num;
-
+ BUG_ON(win_num > DC_N_WINDOWS);
for (i = 0; i < win_num; i++) {
struct tegra_dc_ext_flip_win *flip_win = &data->win[i];
int index = win[i].index;
goto unlock;
}
-
+ BUG_ON(win_num > DC_N_WINDOWS);
for (i = 0; i < win_num; i++) {
u32 syncpt_max;
int index = win[i].index;
{
void __user *user_arg = (void __user *)arg;
struct tegra_dc_ext_user *user = filp->private_data;
- struct tegra_dc_ext_flip_2 args_new;
switch (cmd) {
case TEGRA_DC_EXT_SET_NVMAP_FD:
return -EFAULT;
ret = tegra_dc_ext_flip(user, args.win,
- DC_N_WINDOWS,
- &args.post_syncpt_id,
- &args.post_syncpt_val);
+ TEGRA_DC_EXT_FLIP_N_WINDOWS,
+ &args.post_syncpt_id, &args.post_syncpt_val);
if (copy_to_user(user_arg, &args, sizeof(args)))
return -EFAULT;
case TEGRA_DC_EXT_FLIP2:
{
int ret;
- int num;
- struct tegra_dc_ext_flip_windowattr *start;
- struct tegra_dc_ext_flip_windowattr *temp;
+ int win_num;
+ struct tegra_dc_ext_flip_2 args;
+ struct tegra_dc_ext_flip_windowattr *win;
- if (copy_from_user(&args_new, user_arg, sizeof(args_new)))
+ if (copy_from_user(&args, user_arg, sizeof(args)))
return -EFAULT;
- num = args_new.win_num;
- start = args_new.win;
-
- temp = kzalloc(sizeof(*start) * num, GFP_KERNEL);
+ win_num = args.win_num;
+ win = kzalloc(sizeof(*win) * win_num, GFP_KERNEL);
- if (copy_from_user(temp, start, sizeof(*start) * num))
- return -EFAULT;
-
- args_new.win = temp;
-
- ret = tegra_dc_ext_flip(user, args_new.win,
- args_new.win_num,
- &args_new.post_syncpt_id,
- &args_new.post_syncpt_val);
+ if (copy_from_user(win, args.win, sizeof(*win) * win_num)) {
+ kfree(win);
+ return -EFAULT;
+ }
- if (copy_to_user(start, temp, sizeof(*start) * num))
- return -EFAULT;
+ ret = tegra_dc_ext_flip(user, win, win_num,
+ &args.post_syncpt_id, &args.post_syncpt_val);
- args_new.win = start;
+ if (copy_to_user(args.win, win, sizeof(*win) * win_num) ||
+ copy_to_user(user_arg, &args, sizeof(args))) {
+ kfree(win);
+ return -EFAULT;
+ }
- if (copy_to_user(user_arg, &args_new, sizeof(args_new)))
- return -EFAULT;
- kfree(temp);
+ kfree(win);
return ret;
}