hodec2: apply penalty_low_rxqual_as only on assignment

The penalty timer low_rxqual_as() is only supposed to apply on an
intra-cell re-assignment. However, a segfault has been reported that
apparently applies it to inter-BSC handover.

Make sure that this timer applies only to re-assignment. In effect this
makes sure that the target bts is non-NULL and avoids the segfault.

Related: OS#5525
Change-Id: Ifdb9891fbe7e3f3423a96371def4fcbf2fc0bc0d
This commit is contained in:
Neels Hofmeyr 2022-04-12 15:54:24 +02:00 committed by fixeria
parent 249700add7
commit c68096c2c3
1 changed files with 2 additions and 1 deletions

View File

@ -1448,7 +1448,8 @@ static int find_alternative_lchan(struct gsm_lchan *lchan, bool include_weaker_r
/* After upgrading TCH/H to TCH/F due to bad RxQual, start penalty timer to avoid re-assignment within
* the same cell again, to avoid oscillation from RxQual noise combined with congestion resolution. */
if (!rc && is_upgrade_to_tchf(best_cand, REQUIREMENT_A_MASK)) {
if (!rc && best_cand->target.bts == best_cand->current.bts
&& is_upgrade_to_tchf(best_cand, REQUIREMENT_A_MASK)) {
struct gsm0808_cell_id bts_id;
gsm_bts_cell_id(&bts_id, best_cand->target.bts);
penalty_timers_add(lchan->conn, &lchan->conn->hodec2.penalty_timers, &bts_id,