mirror of
https://github.com/torvalds/linux.git
synced 2026-09-09 09:22:02 +02:00
Staging driver fixes for 7.3-rc2
Here are some small staging driver fixes to resolve some reported bugs that have been found, and tested, in a few staging drivers in 7.3-rc1. Included in here are: - OOB read problem fixes in the rtl8723bs driver - fbtft driver fix - sm750fb driver fix All of these have been in linux-next this week with no reported problems. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCap0zHA8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylsuwCfc6ycZ0QbcKpiDZpzijDTduvUh1IAnAky4xi7 rNKgULapaYP63Mt0exzR =Cajg -----END PGP SIGNATURE----- Merge tag 'staging-7.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging driver fixes from Greg KH: "Here are some small staging driver fixes to resolve some reported bugs that have been found, and tested, in a few staging drivers in 7.3-rc1. Included in here are: - OOB read problem fixes in the rtl8723bs driver - fbtft driver fix - sm750fb driver fix All of these have been in linux-next this week with no reported problems" * tag 'staging-7.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit() staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie() staging: rtl8723bs: fix OOB read in rtw_action_frame_parse() staging: rtl8723bs: fix OOB read / stack overflow in rtw_get_wps_attr() staging: fbtft: make dirty_lock IRQ-safe
This commit is contained in:
commit
bf979ab8f2
|
|
@ -298,14 +298,15 @@ static void fbtft_mkdirty(struct fb_info *info, int y, int height)
|
|||
{
|
||||
struct fbtft_par *par = info->par;
|
||||
struct fb_deferred_io *fbdefio = info->fbdefio;
|
||||
unsigned long flags;
|
||||
|
||||
/* Mark display lines/area as dirty */
|
||||
spin_lock(&par->dirty_lock);
|
||||
spin_lock_irqsave(&par->dirty_lock, flags);
|
||||
if (y < par->dirty_lines_start)
|
||||
par->dirty_lines_start = y;
|
||||
if (y + height - 1 > par->dirty_lines_end)
|
||||
par->dirty_lines_end = y + height - 1;
|
||||
spin_unlock(&par->dirty_lock);
|
||||
spin_unlock_irqrestore(&par->dirty_lock, flags);
|
||||
|
||||
/* Schedule deferred_io to update display (no-op if already on queue)*/
|
||||
schedule_delayed_work(&info->deferred_work, fbdefio->delay);
|
||||
|
|
@ -318,13 +319,13 @@ static void fbtft_deferred_io(struct fb_info *info, struct list_head *pagereflis
|
|||
struct fb_deferred_io_pageref *pageref;
|
||||
unsigned int y_low = 0, y_high = 0;
|
||||
|
||||
spin_lock(&par->dirty_lock);
|
||||
spin_lock_irq(&par->dirty_lock);
|
||||
dirty_lines_start = par->dirty_lines_start;
|
||||
dirty_lines_end = par->dirty_lines_end;
|
||||
/* set display line markers as clean */
|
||||
par->dirty_lines_start = par->info->var.yres - 1;
|
||||
par->dirty_lines_end = 0;
|
||||
spin_unlock(&par->dirty_lock);
|
||||
spin_unlock_irq(&par->dirty_lock);
|
||||
|
||||
/* Mark display lines as dirty */
|
||||
list_for_each_entry(pageref, pagereflist, list) {
|
||||
|
|
|
|||
|
|
@ -741,6 +741,10 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_att
|
|||
u16 attr_data_len = get_unaligned_be16(attr_ptr + 2);
|
||||
u16 attr_len = attr_data_len + 4;
|
||||
|
||||
/* Reject attributes whose claimed length runs past the IE */
|
||||
if (attr_ptr + attr_len > wps_ie + wps_ielen)
|
||||
break;
|
||||
|
||||
if (attr_id == target_attr_id) {
|
||||
target_attr_ptr = attr_ptr;
|
||||
|
||||
|
|
@ -1149,6 +1153,9 @@ int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8 *category, u8 *act
|
|||
u8 c;
|
||||
u8 a = ACT_PUBLIC_MAX;
|
||||
|
||||
if (frame_len < sizeof(struct ieee80211_hdr_3addr) + 2)
|
||||
return false;
|
||||
|
||||
fc = le16_to_cpu(((struct ieee80211_hdr_3addr *)frame)->frame_control);
|
||||
|
||||
if ((fc & (IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) !=
|
||||
|
|
|
|||
|
|
@ -1975,6 +1975,9 @@ int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_
|
|||
break;
|
||||
}
|
||||
|
||||
if (i + 1 >= in_len)
|
||||
break;
|
||||
|
||||
i += (in_ie[i + 1] + 2); /* to the next IE element */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
|
|||
spin_lock(&sm750_dev->slock);
|
||||
|
||||
sm750_dev->accel.de_imageblit(&sm750_dev->accel,
|
||||
image->data, image->width >> 3, 0,
|
||||
image->data, 0,
|
||||
base, pitch, bpp,
|
||||
image->dx, image->dy,
|
||||
image->width, image->height,
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ struct lynx_accel {
|
|||
u32 rop2);
|
||||
|
||||
int (*de_imageblit)(struct lynx_accel *accel, const char *p_srcbuf,
|
||||
u32 src_delta, u32 start_bit, u32 d_base, u32 d_pitch,
|
||||
u32 start_bit, u32 d_base, u32 d_pitch,
|
||||
u32 byte_per_pixel, u32 dx, u32 dy, u32 width,
|
||||
u32 height, u32 f_color, u32 b_color, u32 rop2);
|
||||
|
||||
|
|
|
|||
|
|
@ -288,8 +288,6 @@ static unsigned int de_get_transparency(struct lynx_accel *accel)
|
|||
* sm750_hw_imageblit
|
||||
* @accel: Acceleration device data
|
||||
* @src_buf: pointer to start of source buffer in system memory
|
||||
* @src_delta: Pitch value (in bytes) of the source buffer, +ive means top down
|
||||
* and -ive mean button up
|
||||
* @start_bit: Mono data can start at any bit in a byte, this value should be
|
||||
* 0 to 7
|
||||
* @dest_base: Address of destination: offset in frame buffer
|
||||
|
|
@ -304,7 +302,7 @@ static unsigned int de_get_transparency(struct lynx_accel *accel)
|
|||
* @rop2: ROP value
|
||||
*/
|
||||
int sm750_hw_imageblit(struct lynx_accel *accel, const char *src_buf,
|
||||
u32 src_delta, u32 start_bit, u32 dest_base, u32 dest_pitch,
|
||||
u32 start_bit, u32 dest_base, u32 dest_pitch,
|
||||
u32 byte_per_pixel, u32 dx, u32 dy, u32 width,
|
||||
u32 height, u32 fg_color, u32 bg_color, u32 rop2)
|
||||
{
|
||||
|
|
@ -395,7 +393,7 @@ int sm750_hw_imageblit(struct lynx_accel *accel, const char *src_buf,
|
|||
write_dp_port(accel, *(unsigned int *)remain);
|
||||
}
|
||||
|
||||
src_buf += src_delta;
|
||||
src_buf += bytes_per_scan;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -220,8 +220,6 @@ int sm750_hw_copyarea(struct lynx_accel *accel,
|
|||
/**
|
||||
* sm750_hw_imageblit
|
||||
* @src_buf: pointer to start of source buffer in system memory
|
||||
* @src_delta: Pitch value (in bytes) of the source buffer, +ive means top down
|
||||
*>----- and -ive mean button up
|
||||
* @start_bit: Mono data can start at any bit in a byte, this value should be
|
||||
*>----- 0 to 7
|
||||
* @dest_base: Address of destination: offset in frame buffer
|
||||
|
|
@ -236,7 +234,7 @@ int sm750_hw_copyarea(struct lynx_accel *accel,
|
|||
* @rop2: ROP value
|
||||
*/
|
||||
int sm750_hw_imageblit(struct lynx_accel *accel, const char *src_buf,
|
||||
u32 src_delta, u32 start_bit, u32 dest_base, u32 dest_pitch,
|
||||
u32 start_bit, u32 dest_base, u32 dest_pitch,
|
||||
u32 byte_per_pixel, u32 dx, u32 dy, u32 width,
|
||||
u32 height, u32 fg_color, u32 bg_color, u32 rop2);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user