Loading drivers/tty/vt/vt_ioctl.c +27 −41 Original line number Diff line number Diff line Loading @@ -842,58 +842,44 @@ int vt_ioctl(struct tty_struct *tty, case VT_RESIZEX: { struct vt_consize __user *vtconsize = up; ushort ll,cc,vlin,clin,vcol,ccol; struct vt_consize v; if (!perm) return -EPERM; if (!access_ok(VERIFY_READ, vtconsize, sizeof(struct vt_consize))) { ret = -EFAULT; break; } if (copy_from_user(&v, up, sizeof(struct vt_consize))) return -EFAULT; /* FIXME: Should check the copies properly */ __get_user(ll, &vtconsize->v_rows); __get_user(cc, &vtconsize->v_cols); __get_user(vlin, &vtconsize->v_vlin); __get_user(clin, &vtconsize->v_clin); __get_user(vcol, &vtconsize->v_vcol); __get_user(ccol, &vtconsize->v_ccol); vlin = vlin ? vlin : vc->vc_scan_lines; if (clin) { if (ll) { if (ll != vlin/clin) { /* Parameters don't add up */ ret = -EINVAL; break; if (!v.v_vlin) v.v_vlin = vc->vc_scan_lines; if (v.v_clin) { int rows = v.v_vlin/v.v_clin; if (v.v_rows != rows) { if (v.v_rows) /* Parameters don't add up */ return -EINVAL; v.v_rows = rows; } } else ll = vlin/clin; } if (vcol && ccol) { if (cc) { if (cc != vcol/ccol) { ret = -EINVAL; break; if (v.v_vcol && v.v_ccol) { int cols = v.v_vcol/v.v_ccol; if (v.v_cols != cols) { if (v.v_cols) return -EINVAL; v.v_cols = cols; } } else cc = vcol/ccol; } if (clin > 32) { ret = -EINVAL; break; } if (v.v_clin > 32) return -EINVAL; for (i = 0; i < MAX_NR_CONSOLES; i++) { if (!vc_cons[i].d) continue; console_lock(); if (vlin) vc_cons[i].d->vc_scan_lines = vlin; if (clin) vc_cons[i].d->vc_font.height = clin; if (v.v_vlin) vc_cons[i].d->vc_scan_lines = v.v_vlin; if (v.v_clin) vc_cons[i].d->vc_font.height = v.v_clin; vc_cons[i].d->vc_resize_user = 1; vc_resize(vc_cons[i].d, cc, ll); vc_resize(vc_cons[i].d, v.v_cols, v.v_rows); console_unlock(); } break; Loading Loading
drivers/tty/vt/vt_ioctl.c +27 −41 Original line number Diff line number Diff line Loading @@ -842,58 +842,44 @@ int vt_ioctl(struct tty_struct *tty, case VT_RESIZEX: { struct vt_consize __user *vtconsize = up; ushort ll,cc,vlin,clin,vcol,ccol; struct vt_consize v; if (!perm) return -EPERM; if (!access_ok(VERIFY_READ, vtconsize, sizeof(struct vt_consize))) { ret = -EFAULT; break; } if (copy_from_user(&v, up, sizeof(struct vt_consize))) return -EFAULT; /* FIXME: Should check the copies properly */ __get_user(ll, &vtconsize->v_rows); __get_user(cc, &vtconsize->v_cols); __get_user(vlin, &vtconsize->v_vlin); __get_user(clin, &vtconsize->v_clin); __get_user(vcol, &vtconsize->v_vcol); __get_user(ccol, &vtconsize->v_ccol); vlin = vlin ? vlin : vc->vc_scan_lines; if (clin) { if (ll) { if (ll != vlin/clin) { /* Parameters don't add up */ ret = -EINVAL; break; if (!v.v_vlin) v.v_vlin = vc->vc_scan_lines; if (v.v_clin) { int rows = v.v_vlin/v.v_clin; if (v.v_rows != rows) { if (v.v_rows) /* Parameters don't add up */ return -EINVAL; v.v_rows = rows; } } else ll = vlin/clin; } if (vcol && ccol) { if (cc) { if (cc != vcol/ccol) { ret = -EINVAL; break; if (v.v_vcol && v.v_ccol) { int cols = v.v_vcol/v.v_ccol; if (v.v_cols != cols) { if (v.v_cols) return -EINVAL; v.v_cols = cols; } } else cc = vcol/ccol; } if (clin > 32) { ret = -EINVAL; break; } if (v.v_clin > 32) return -EINVAL; for (i = 0; i < MAX_NR_CONSOLES; i++) { if (!vc_cons[i].d) continue; console_lock(); if (vlin) vc_cons[i].d->vc_scan_lines = vlin; if (clin) vc_cons[i].d->vc_font.height = clin; if (v.v_vlin) vc_cons[i].d->vc_scan_lines = v.v_vlin; if (v.v_clin) vc_cons[i].d->vc_font.height = v.v_clin; vc_cons[i].d->vc_resize_user = 1; vc_resize(vc_cons[i].d, cc, ll); vc_resize(vc_cons[i].d, v.v_cols, v.v_rows); console_unlock(); } break; Loading