Skip to content

Commit edab558

Browse files
Alan Coxgregkh
authored andcommitted
vt: sort out locking for font handling
The font methods are console_lock covered. Unfortunately they don't extend the lock over all the needed tests. Signed-off-by: Alan Cox <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent dbca36e commit edab558

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

drivers/tty/vt/vt.c

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3969,9 +3969,6 @@ static int con_font_get(struct vc_data *vc, struct console_font_op *op)
39693969
int rc = -EINVAL;
39703970
int c;
39713971

3972-
if (vc->vc_mode != KD_TEXT)
3973-
return -EINVAL;
3974-
39753972
if (op->data) {
39763973
font.data = kmalloc(max_font_size, GFP_KERNEL);
39773974
if (!font.data)
@@ -3980,7 +3977,9 @@ static int con_font_get(struct vc_data *vc, struct console_font_op *op)
39803977
font.data = NULL;
39813978

39823979
console_lock();
3983-
if (vc->vc_sw->con_font_get)
3980+
if (vc->vc_mode != KD_TEXT)
3981+
rc = -EINVAL;
3982+
else if (vc->vc_sw->con_font_get)
39843983
rc = vc->vc_sw->con_font_get(vc, &font);
39853984
else
39863985
rc = -ENOSYS;
@@ -4062,7 +4061,9 @@ static int con_font_set(struct vc_data *vc, struct console_font_op *op)
40624061
if (IS_ERR(font.data))
40634062
return PTR_ERR(font.data);
40644063
console_lock();
4065-
if (vc->vc_sw->con_font_set)
4064+
if (vc->vc_mode != KD_TEXT)
4065+
rc = -EINVAL;
4066+
else if (vc->vc_sw->con_font_set)
40664067
rc = vc->vc_sw->con_font_set(vc, &font, op->flags);
40674068
else
40684069
rc = -ENOSYS;
@@ -4078,8 +4079,6 @@ static int con_font_default(struct vc_data *vc, struct console_font_op *op)
40784079
char *s = name;
40794080
int rc;
40804081

4081-
if (vc->vc_mode != KD_TEXT)
4082-
return -EINVAL;
40834082

40844083
if (!op->data)
40854084
s = NULL;
@@ -4089,6 +4088,10 @@ static int con_font_default(struct vc_data *vc, struct console_font_op *op)
40894088
name[MAX_FONT_NAME - 1] = 0;
40904089

40914090
console_lock();
4091+
if (vc->vc_mode != KD_TEXT) {
4092+
console_unlock();
4093+
return -EINVAL;
4094+
}
40924095
if (vc->vc_sw->con_font_default)
40934096
rc = vc->vc_sw->con_font_default(vc, &font, s);
40944097
else
@@ -4106,11 +4109,11 @@ static int con_font_copy(struct vc_data *vc, struct console_font_op *op)
41064109
int con = op->height;
41074110
int rc;
41084111

4109-
if (vc->vc_mode != KD_TEXT)
4110-
return -EINVAL;
41114112

41124113
console_lock();
4113-
if (!vc->vc_sw->con_font_copy)
4114+
if (vc->vc_mode != KD_TEXT)
4115+
rc = -EINVAL;
4116+
else if (!vc->vc_sw->con_font_copy)
41144117
rc = -ENOSYS;
41154118
else if (con < 0 || !vc_cons_allocated(con))
41164119
rc = -ENOTTY;

0 commit comments

Comments
 (0)